<!doctype html><html lang="en">
 <head>
  <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  <title>Web Speech API</title>
  <meta content="width=device-width, initial-scale=1, shrink-to-fit=no" name="viewport">
<style data-fill-with="stylesheet">/******************************************************************************
 *                   Style sheet for the W3C specifications                   *
 *
 * Special classes handled by this style sheet include:
 *
 * Indices
 *   - .toc for the Table of Contents (<ol class="toc">)
 *     + <span class="secno"> for the section numbers
 *   - #toc for the Table of Contents (<nav id="toc">)
 *   - ul.index for Indices (<a href="#ref">term</a><span>, in §N.M</span>)
 *   - table.index for Index Tables (e.g. for properties or elements)
 *
 * Structural Markup
 *   - table.data for general data tables
 *     -> use 'scope' attribute, <colgroup>, <thead>, and <tbody> for best results !
 *     -> use <table class='complex data'> for extra-complex tables
 *     -> use <td class='long'> for paragraph-length cell content
 *     -> use <td class='pre'> when manual line breaks/indentation would help readability
 *   - dl.switch for switch statements
 *   - ol.algorithm for algorithms (helps to visualize nesting)
 *   - .figure and .caption (HTML4) and figure and figcaption (HTML5)
 *     -> .sidefigure for right-floated figures
 *   - ins/del
 *
 * Code
 *   - pre and code
 *
 * Special Sections
 *   - .note       for informative notes             (div, p, span, aside, details)
 *   - .example    for informative examples          (div, p, pre, span)
 *   - .issue      for issues                        (div, p, span)
 *   - .assertion  for assertions                    (div, p, span)
 *   - .advisement for loud normative statements     (div, p, strong)
 *   - .annoying-warning for spec obsoletion notices (div, aside, details)
 *
 * Definition Boxes
 *   - pre.def   for WebIDL definitions
 *   - table.def for tables that define other entities (e.g. CSS properties)
 *   - dl.def    for definition lists that define other entitles (e.g. HTML elements)
 *
 * Numbering
 *   - .secno for section numbers in .toc and headings (<span class='secno'>3.2</span>)
 *   - .marker for source-inserted example/figure/issue numbers (<span class='marker'>Issue 4</span>)
 *   - ::before styled for CSS-generated issue/example/figure numbers:
 *     -> Documents wishing to use this only need to add
 *        figcaption::before,
 *        .caption::before { content: "Figure "  counter(figure) " ";  }
 *        .example::before { content: "Example " counter(example) " "; }
 *        .issue::before   { content: "Issue "   counter(issue) " ";   }
 *
 * Header Stuff (ignore, just don't conflict with these classes)
 *   - .head for the header
 *   - .copyright for the copyright
 *
 * Miscellaneous
 *   - .overlarge for things that should be as wide as possible, even if
 *     that overflows the body text area. This can be used on an item or
 *     on its container, depending on the effect desired.
 *     Note that this styling basically doesn't help at all when printing,
 *     since A4 paper isn't much wider than the max-width here.
 *     It's better to design things to fit into a narrower measure if possible.
 *   - js-added ToC jump links (see fixup.js)
 *
 ******************************************************************************/

/******************************************************************************/
/*                                   Body                                     */
/******************************************************************************/

	body {
		counter-reset: example figure issue;

		/* Layout */
		max-width: 50em;               /* limit line length to 50em for readability   */
		margin: 0 auto;                /* center text within page                     */
		padding: 1.6em 1.5em 2em 50px; /* assume 16px font size for downlevel clients */
		padding: 1.6em 1.5em 2em calc(26px + 1.5em); /* leave space for status flag     */

		/* Typography */
		line-height: 1.5;
		font-family: sans-serif;
		widows: 2;
		orphans: 2;
		word-wrap: break-word;
		overflow-wrap: break-word;
		hyphens: auto;

		/* Colors */
		color: black;
		background: white top left fixed no-repeat;
		background-size: 25px auto;
	}


/******************************************************************************/
/*                         Front Matter & Navigation                          */
/******************************************************************************/

/** Header ********************************************************************/

	div.head { margin-bottom: 1em }
	div.head hr { border-style: solid; }

	div.head h1 {
		font-weight: bold;
		margin: 0 0 .1em;
		font-size: 220%;
	}

	div.head h2 { margin-bottom: 1.5em;}

/** W3C Logo ******************************************************************/

	.head .logo {
		float: right;
		margin: 0.4rem 0 0.2rem .4rem;
	}

	.head img[src*="logos/W3C"] {
		display: block;
		border: solid #1a5e9a;
		border-width: .65rem .7rem .6rem;
		border-radius: .4rem;
		background: #1a5e9a;
		color: white;
		font-weight: bold;
	}

	.head a:hover > img[src*="logos/W3C"],
	.head a:focus > img[src*="logos/W3C"] {
		opacity: .8;
	}

	.head a:active > img[src*="logos/W3C"] {
		background: #c00;
		border-color: #c00;
	}

	/* see also additional rules in Link Styling section */

/** Copyright *****************************************************************/

	p.copyright,
	p.copyright small { font-size: small }

/** Back to Top / ToC Toggle **************************************************/

	@media print {
		#toc-nav {
			display: none;
		}
	}
	@media not print {
		#toc-nav {
			position: fixed;
			z-index: 2;
			bottom: 0; left: 0;
			margin: 0;
			min-width: 1.33em;
			border-top-right-radius: 2rem;
			box-shadow: 0 0 2px;
			font-size: 1.5em;
			color: black;
		}
		#toc-nav > a {
			display: block;
			white-space: nowrap;

			height: 1.33em;
			padding: .1em 0.3em;
			margin: 0;

			background: white;
			box-shadow: 0 0 2px;
			border: none;
			border-top-right-radius: 1.33em;
			background: white;
		}
		#toc-nav > #toc-jump {
			padding-bottom: 2em;
			margin-bottom: -1.9em;
		}

		#toc-nav > a:hover,
		#toc-nav > a:focus {
			background: #f8f8f8;
		}
		#toc-nav > a:not(:hover):not(:focus) {
			color: #707070;
		}

		/* statusbar gets in the way on keyboard focus; remove once browsers fix */
		#toc-nav > a[href="#toc"]:not(:hover):focus:last-child {
			padding-bottom: 1.5rem;
		}

		#toc-nav:not(:hover) > a:not(:focus) > span + span {
			/* Ideally this uses :focus-within on #toc-nav */
			display: none;
		}
		#toc-nav > a > span + span {
			padding-right: 0.2em;
		}

		#toc-toggle-inline {
			vertical-align: 0.05em;
			font-size: 80%;
			color: gray;
			color: hsla(203,20%,40%,.7);
			border-style: none;
			background: transparent;
			position: relative;
		}
		#toc-toggle-inline:hover:not(:active),
		#toc-toggle-inline:focus:not(:active) {
			text-shadow: 1px 1px silver;
			top: -1px;
			left: -1px;
		}

		#toc-nav :active {
			color: #C00;
		}
	}

/** ToC Sidebar ***************************************************************/

	/* Floating sidebar */
	@media screen {
		body.toc-sidebar #toc {
			position: fixed;
			top: 0; bottom: 0;
			left: 0;
			width: 23.5em;
			max-width: 80%;
			max-width: calc(100% - 2em - 26px);
			overflow: auto;
			padding: 0 1em;
			padding-left: 42px;
			padding-left: calc(1em + 26px);
			background: inherit;
			background-color: #f7f8f9;
			z-index: 1;
			box-shadow: -.1em 0 .25em rgba(0,0,0,.1) inset;
		}
		body.toc-sidebar #toc h2 {
			margin-top: .8rem;
			font-variant: small-caps;
			font-variant: all-small-caps;
			text-transform: lowercase;
			font-weight: bold;
			color: gray;
			color: hsla(203,20%,40%,.7);
		}
		body.toc-sidebar #toc-jump:not(:focus) {
			width: 0;
			height: 0;
			padding: 0;
			position: absolute;
			overflow: hidden;
		}
	}
	/* Hide main scroller when only the ToC is visible anyway */
	@media screen and (max-width: 28em) {
		body.toc-sidebar {
			overflow: hidden;
		}
	}

	/* Sidebar with its own space */
	@media screen and (min-width: 78em) {
		body:not(.toc-inline) #toc {
			position: fixed;
			top: 0; bottom: 0;
			left: 0;
			width: 23.5em;
			overflow: auto;
			padding: 0 1em;
			padding-left: 42px;
			padding-left: calc(1em + 26px);
			background: inherit;
			background-color: #f7f8f9;
			z-index: 1;
			box-shadow: -.1em 0 .25em rgba(0,0,0,.1) inset;
		}
		body:not(.toc-inline) #toc h2 {
			margin-top: .8rem;
			font-variant: small-caps;
			font-variant: all-small-caps;
			text-transform: lowercase;
			font-weight: bold;
			color: gray;
			color: hsla(203,20%,40%,.7);
		}

		body:not(.toc-inline) {
			padding-left: 29em;
		}
		/* See also Overflow section at the bottom */

		body:not(.toc-inline) #toc-jump:not(:focus) {
			width: 0;
			height: 0;
			padding: 0;
			position: absolute;
			overflow: hidden;
		}
	}
	@media screen and (min-width: 90em) {
		body:not(.toc-inline) {
			margin: 0 4em;
		}
	}

/******************************************************************************/
/*                                Sectioning                                  */
/******************************************************************************/

/** Headings ******************************************************************/

	h1, h2, h3, h4, h5, h6, dt {
		page-break-after: avoid;
		page-break-inside: avoid;
		font: 100% sans-serif;   /* Reset all font styling to clear out UA styles */
		font-family: inherit;    /* Inherit the font family. */
		line-height: 1.2;        /* Keep wrapped headings compact */
		hyphens: manual;         /* Hyphenated headings look weird */
	}

	h2, h3, h4, h5, h6 {
		margin-top: 3rem;
	}

	h1, h2, h3 {
		color: #005A9C;
		background: transparent;
	}

	h1 { font-size: 170%; }
	h2 { font-size: 140%; }
	h3 { font-size: 120%; }
	h4 { font-weight: bold; }
	h5 { font-style: italic; }
	h6 { font-variant: small-caps; }
	dt { font-weight: bold; }

/** Subheadings ***************************************************************/

	h1 + h2,
	#subtitle {
		/* #subtitle is a subtitle in an H2 under the H1 */
		margin-top: 0;
	}
	h2 + h3,
	h3 + h4,
	h4 + h5,
	h5 + h6 {
		margin-top: 1.2em; /* = 1 x line-height */
	}

/** Section divider ***********************************************************/

	:not(.head) > hr {
		font-size: 1.5em;
		text-align: center;
		margin: 1em auto;
		height: auto;
		border: transparent solid 0;
		background: transparent;
	}
	:not(.head) > hr::before {
		content: "\2727\2003\2003\2727\2003\2003\2727";
	}

/******************************************************************************/
/*                            Paragraphs and Lists                            */
/******************************************************************************/

	p {
		margin: 1em 0;
	}

	dd > p:first-child,
	li > p:first-child {
		margin-top: 0;
	}

	ul, ol {
		margin-left: 0;
		padding-left: 2em;
	}

	li {
		margin: 0.25em 0 0.5em;
		padding: 0;
	}

	dl dd {
		margin: 0 0 .5em 2em;
	}

	.head dd + dd { /* compact for header */
		margin-top: -.5em;
	}

	/* Style for algorithms */
	ol.algorithm ol:not(.algorithm),
	.algorithm > ol ol:not(.algorithm) {
	 border-left: 0.5em solid #DEF;
	}

	/* Put nice boxes around each algorithm. */
	[data-algorithm]:not(.heading) {
	  padding: .5em;
	  border: thin solid #ddd; border-radius: .5em;
	  margin: .5em calc(-0.5em - 1px);
	}
	[data-algorithm]:not(.heading) > :first-child {
	  margin-top: 0;
	}
	[data-algorithm]:not(.heading) > :last-child {
	  margin-bottom: 0;
	}

	/* Style for switch/case <dl>s */
	dl.switch > dd > ol.only,
	dl.switch > dd > .only > ol {
	 margin-left: 0;
	}
	dl.switch > dd > ol.algorithm,
	dl.switch > dd > .algorithm > ol {
	 margin-left: -2em;
	}
	dl.switch {
	 padding-left: 2em;
	}
	dl.switch > dt {
	 text-indent: -1.5em;
	 margin-top: 1em;
	}
	dl.switch > dt + dt {
	 margin-top: 0;
	}
	dl.switch > dt::before {
	 content: '\21AA';
	 padding: 0 0.5em 0 0;
	 display: inline-block;
	 width: 1em;
	 text-align: right;
	 line-height: 0.5em;
	}

/** Terminology Markup ********************************************************/


/******************************************************************************/
/*                                 Inline Markup                              */
/******************************************************************************/

/** Terminology Markup ********************************************************/
	dfn   { /* Defining instance */
		font-weight: bolder;
	}
	a > i { /* Instance of term */
		font-style: normal;
	}
	dt dfn code, code.idl {
		font-size: medium;
	}
	dfn var {
		font-style: normal;
	}

/** Change Marking ************************************************************/

	del { color: red;  text-decoration: line-through; }
	ins { color: #080; text-decoration: underline;    }

/** Miscellaneous improvements to inline formatting ***************************/

	sup {
		vertical-align: super;
		font-size: 80%
	}

/******************************************************************************/
/*                                    Code                                    */
/******************************************************************************/

/** General monospace/pre rules ***********************************************/

	pre, code, samp {
		font-family: Menlo, Consolas, "DejaVu Sans Mono", Monaco, monospace;
		font-size: .9em;
		page-break-inside: avoid;
		hyphens: none;
		text-transform: none;
	}
	pre code,
	code code {
		font-size: 100%;
	}

	pre {
		margin-top: 1em;
		margin-bottom: 1em;
		overflow: auto;
	}

/** Inline Code fragments *****************************************************/

  /* Do something nice. */

/******************************************************************************/
/*                                    Links                                   */
/******************************************************************************/

/** General Hyperlinks ********************************************************/

	/* We hyperlink a lot, so make it less intrusive */
	a[href] {
		color: #034575;
		text-decoration: none;
		border-bottom: 1px solid #707070;
		/* Need a bit of extending for it to look okay */
		padding: 0 1px 0;
		margin: 0 -1px 0;
	}
	a:visited {
		border-bottom-color: #BBB;
	}

	/* Use distinguishing colors when user is interacting with the link */
	a[href]:focus,
	a[href]:hover {
		background: #f8f8f8;
		background: rgba(75%, 75%, 75%, .25);
		border-bottom-width: 3px;
		margin-bottom: -2px;
	}
	a[href]:active {
		color: #C00;
		border-color: #C00;
	}

	/* Backout above styling for W3C logo */
	.head .logo,
	.head .logo a {
		border: none;
		text-decoration: none;
		background: transparent;
	}

/******************************************************************************/
/*                                    Images                                  */
/******************************************************************************/

	img {
		border-style: none;
	}

	/* For autogen numbers, add
	   .caption::before, figcaption::before { content: "Figure " counter(figure) ". "; }
	*/

	figure, .figure, .sidefigure {
		page-break-inside: avoid;
		text-align: center;
		margin: 2.5em 0;
	}
	.figure img,    .sidefigure img,    figure img,
	.figure object, .sidefigure object, figure object {
		max-width: 100%;
		margin: auto;
	}
	.figure pre, .sidefigure pre, figure pre {
		text-align: left;
		display: table;
		margin: 1em auto;
	}
	.figure table, figure table {
		margin: auto;
	}
	@media screen and (min-width: 20em) {
		.sidefigure {
			float: right;
			width: 50%;
			margin: 0 0 0.5em 0.5em
		}
	}
	.caption, figcaption, caption {
		font-style: italic;
		font-size: 90%;
	}
	.caption::before, figcaption::before, figcaption > .marker {
		font-weight: bold;
	}
	.caption, figcaption {
		counter-increment: figure;
	}

	/* DL list is indented 2em, but figure inside it is not */
	dd > .figure, dd > figure { margin-left: -2em }

/******************************************************************************/
/*                             Colored Boxes                                  */
/******************************************************************************/

	.issue, .note, .example, .assertion, .advisement, blockquote {
		padding: .5em;
		border: .5em;
		border-left-style: solid;
		page-break-inside: avoid;
	}
	span.issue, span.note {
		padding: .1em .5em .15em;
		border-right-style: solid;
	}

	.issue,
	.note,
	.example,
	.advisement,
	.assertion,
	blockquote {
		margin: 1em auto;
	}
	.note  > p:first-child,
	.issue > p:first-child,
	blockquote > :first-child {
		margin-top: 0;
	}
	blockquote > :last-child {
		margin-bottom: 0;
	}

/** Blockquotes ***************************************************************/

	blockquote {
		border-color: silver;
	}

/** Open issue ****************************************************************/

	.issue {
		border-color: #E05252;
		background: #FBE9E9;
		counter-increment: issue;
		overflow: auto;
	}
	.issue::before, .issue > .marker {
		text-transform: uppercase;
		color: #AE1E1E;
		padding-right: 1em;
		text-transform: uppercase;
	}
	/* Add .issue::before { content: "Issue " counter(issue) " "; } for autogen numbers,
	   or use class="marker" to mark up the issue number in source. */

/** Example *******************************************************************/

	.example {
		border-color: #E0CB52;
		background: #FCFAEE;
		counter-increment: example;
		overflow: auto;
		clear: both;
	}
	.example::before, .example > .marker {
		text-transform: uppercase;
		color: #827017;
		min-width: 7.5em;
		display: block;
	}
	/* Add .example::before { content: "Example " counter(example) " "; } for autogen numbers,
	   or use class="marker" to mark up the example number in source. */

/** Non-normative Note ********************************************************/

	.note {
		border-color: #52E052;
		background: #E9FBE9;
		overflow: auto;
	}

	.note::before, .note > .marker,
	details.note > summary::before,
	details.note > summary > .marker {
		text-transform: uppercase;
		display: block;
		color: hsl(120, 70%, 30%);
	}
	/* Add .note::before { content: "Note"; } for autogen label,
	   or use class="marker" to mark up the label in source. */

	details.note > summary {
		display: block;
		color: hsl(120, 70%, 30%);
	}
	details.note[open] > summary {
		border-bottom: 1px silver solid;
	}

/** Assertion Box *************************************************************/
	/*  for assertions in algorithms */

	.assertion {
		border-color: #AAA;
		background: #EEE;
	}

/** Advisement Box ************************************************************/
	/*  for attention-grabbing normative statements */

	.advisement {
		border-color: orange;
		border-style: none solid;
		background: #FFEECC;
	}
	strong.advisement {
		display: block;
		text-align: center;
	}
	.advisement > .marker {
		color: #B35F00;
	}

/** Spec Obsoletion Notice ****************************************************/
	/* obnoxious obsoletion notice for older/abandoned specs. */

	details {
		display: block;
	}
	summary {
		font-weight: bolder;
	}

	.annoying-warning:not(details),
	details.annoying-warning:not([open]) > summary,
	details.annoying-warning[open] {
		background: #fdd;
		color: red;
		font-weight: bold;
		padding: .75em 1em;
		border: thick red;
		border-style: solid;
		border-radius: 1em;
	}
	.annoying-warning :last-child {
		margin-bottom: 0;
	}

@media not print {
	details.annoying-warning[open] {
		position: fixed;
		left: 1em;
		right: 1em;
		bottom: 1em;
		z-index: 1000;
	}
}

	details.annoying-warning:not([open]) > summary {
		text-align: center;
	}

/** Entity Definition Boxes ***************************************************/

	.def {
		padding: .5em 1em;
		background: #DEF;
		margin: 1.2em 0;
		border-left: 0.5em solid #8CCBF2;
	}

/******************************************************************************/
/*                                    Tables                                  */
/******************************************************************************/

	th, td {
		text-align: left;
		text-align: start;
	}

/** Property/Descriptor Definition Tables *************************************/

	table.def {
		/* inherits .def box styling, see above */
		width: 100%;
		border-spacing: 0;
	}

	table.def td,
	table.def th {
		padding: 0.5em;
		vertical-align: baseline;
		border-bottom: 1px solid #bbd7e9;
	}

	table.def > tbody > tr:last-child th,
	table.def > tbody > tr:last-child td {
		border-bottom: 0;
	}

	table.def th {
		font-style: italic;
		font-weight: normal;
		padding-left: 1em;
		width: 3em;
	}

	/* For when values are extra-complex and need formatting for readability */
	table td.pre {
		white-space: pre-wrap;
	}

	/* A footnote at the bottom of a def table */
	table.def           td.footnote {
		padding-top: 0.6em;
	}
	table.def           td.footnote::before {
		content: " ";
		display: block;
		height: 0.6em;
		width: 4em;
		border-top: thin solid;
	}

/** Data tables (and properly marked-up index tables) *************************/
	/*
		 <table class="data"> highlights structural relationships in a table
		 when correct markup is used (e.g. thead/tbody, th vs. td, scope attribute)

		 Use class="complex data" for particularly complicated tables --
		 (This will draw more lines: busier, but clearer.)

		 Use class="long" on table cells with paragraph-like contents
		 (This will adjust text alignment accordingly.)
		 Alternately use class="longlastcol" on tables, to have the last column assume "long".
	*/

	table {
		word-wrap: normal;
		overflow-wrap: normal;
		hyphens: manual;
	}

	table.data,
	table.index {
		margin: 1em auto;
		border-collapse: collapse;
		border: hidden;
		width: 100%;
	}
	table.data caption,
	table.index caption {
		max-width: 50em;
		margin: 0 auto 1em;
	}

	table.data td,  table.data th,
	table.index td, table.index th {
		padding: 0.5em 1em;
		border-width: 1px;
		border-color: silver;
		border-top-style: solid;
	}

	table.data thead td:empty {
		padding: 0;
		border: 0;
	}

	table.data  thead,
	table.index thead,
	table.data  tbody,
	table.index tbody {
		border-bottom: 2px solid;
	}

	table.data colgroup,
	table.index colgroup {
		border-left: 2px solid;
	}

	table.data  tbody th:first-child,
	table.index tbody th:first-child  {
		border-right: 2px solid;
		border-top: 1px solid silver;
		padding-right: 1em;
	}

	table.data th[colspan],
	table.data td[colspan] {
		text-align: center;
	}

	table.complex.data th,
	table.complex.data td {
		border: 1px solid silver;
		text-align: center;
	}

	table.data.longlastcol td:last-child,
	table.data td.long {
	 vertical-align: baseline;
	 text-align: left;
	}

	table.data img {
		vertical-align: middle;
	}


/*
Alternate table alignment rules

	table.data,
	table.index {
		text-align: center;
	}

	table.data  thead th[scope="row"],
	table.index thead th[scope="row"] {
		text-align: right;
	}

	table.data  tbody th:first-child,
	table.index tbody th:first-child  {
		text-align: right;
	}

Possible extra rowspan handling

	table.data  tbody th[rowspan]:not([rowspan='1']),
	table.index tbody th[rowspan]:not([rowspan='1']),
	table.data  tbody td[rowspan]:not([rowspan='1']),
	table.index tbody td[rowspan]:not([rowspan='1']) {
		border-left: 1px solid silver;
	}

	table.data  tbody th[rowspan]:first-child,
	table.index tbody th[rowspan]:first-child,
	table.data  tbody td[rowspan]:first-child,
	table.index tbody td[rowspan]:first-child{
		border-left: 0;
		border-right: 1px solid silver;
	}
*/

/******************************************************************************/
/*                                  Indices                                   */
/******************************************************************************/


/** Table of Contents *********************************************************/

	.toc a {
		/* More spacing; use padding to make it part of the click target. */
		padding-top: 0.1rem;
		/* Larger, more consistently-sized click target */
		display: block;
		/* Reverse color scheme */
		color: black;
		border-color: #3980B5;
		border-bottom-width: 3px !important;
		margin-bottom: 0px !important;
	}
	.toc a:visited {
		border-color: #054572;
	}
	.toc a:not(:focus):not(:hover) {
		/* Allow colors to cascade through from link styling */
		border-bottom-color: transparent;
	}

	.toc, .toc ol, .toc ul, .toc li {
		list-style: none; /* Numbers must be inlined into source */
		/* because generated content isn't search/selectable and markers can't do multilevel yet */
		margin:  0;
		padding: 0;
		line-height: 1.1rem; /* consistent spacing */
	}

	/* ToC not indented until third level, but font style & margins show hierarchy */
	.toc > li             { font-weight: bold;   }
	.toc > li li          { font-weight: normal; }
	.toc > li li li       { font-size:   95%;    }
	.toc > li li li li    { font-size:   90%;    }
	.toc > li li li li .secno { font-size: 85%; }
	.toc > li li li li li { font-size:   85%;    }
	.toc > li li li li li .secno { font-size: 100%; }

	/* @supports not (display:grid) { */
		.toc > li             { margin: 1.5rem 0;    }
		.toc > li li          { margin: 0.3rem 0;    }
		.toc > li li li       { margin-left: 2rem;   }

		/* Section numbers in a column of their own */
		.toc .secno {
			float: left;
			width: 4rem;
			white-space: nowrap;
		}

		.toc li {
			clear: both;
		}

		:not(li) > .toc              { margin-left:  5rem; }
		.toc .secno                  { margin-left: -5rem; }
		.toc > li li li .secno       { margin-left: -7rem; }
		.toc > li li li li .secno    { margin-left: -9rem; }
		.toc > li li li li li .secno { margin-left: -11rem; }

		/* Tighten up indentation in narrow ToCs */
		@media (max-width: 30em) {
			:not(li) > .toc              { margin-left:  4rem; }
			.toc .secno                  { margin-left: -4rem; }
			.toc > li li li              { margin-left:  1rem; }
			.toc > li li li .secno       { margin-left: -5rem; }
			.toc > li li li li .secno    { margin-left: -6rem; }
			.toc > li li li li li .secno { margin-left: -7rem; }
		}
	/* } */

	@supports (display:grid) and (display:contents) {
		/* Use #toc over .toc to override non-@supports rules. */
		#toc {
			display: grid;
			align-content: start;
			grid-template-columns: auto 1fr;
			grid-column-gap: 1rem;
			column-gap: 1rem;
			grid-row-gap: .6rem;
			row-gap: .6rem;
		}
		#toc h2 {
			grid-column: 1 / -1;
			margin-bottom: 0;
		}
		#toc ol,
		#toc li,
		#toc a {
			display: contents;
			/* Switch <a> to subgrid when supported */
		}
		#toc span {
			margin: 0;
		}
		#toc > .toc > li > a > span {
			/* The spans of the top-level list,
			   comprising the first items of each top-level section. */
			margin-top: 1.1rem;
		}
		#toc#toc .secno { /* Ugh, need more specificity to override base.css */
			grid-column: 1;
			width: auto;
			margin-left: 0;
		}
		#toc .content {
			grid-column: 2;
			width: auto;
			margin-right: 1rem;
		}
		#toc .content:hover {
			background: rgba(75%, 75%, 75%, .25);
			border-bottom: 3px solid #054572;
			margin-bottom: -3px;
		}
		#toc li li li .content {
			margin-left: 1rem;
		}
		#toc li li li li .content {
			margin-left: 2rem;
		}
	}


/** Index *********************************************************************/

	/* Index Lists: Layout */
	ul.index       { margin-left: 0; columns: 15em; text-indent: 1em hanging; }
	ul.index li    { margin-left: 0; list-style: none; break-inside: avoid; }
	ul.index li li { margin-left: 1em }
	ul.index dl    { margin-top: 0; }
	ul.index dt    { margin: .2em 0 .2em 20px;}
	ul.index dd    { margin: .2em 0 .2em 40px;}
	/* Index Lists: Typography */
	ul.index ul,
	ul.index dl { font-size: smaller; }
	@media not print {
		ul.index li span {
			white-space: nowrap;
			color: transparent; }
		ul.index li a:hover + span,
		ul.index li a:focus + span {
			color: #707070;
		}
	}

/** Index Tables *****************************************************/
	/* See also the data table styling section, which this effectively subclasses */

	table.index {
		font-size: small;
		border-collapse: collapse;
		border-spacing: 0;
		text-align: left;
		margin: 1em 0;
	}

	table.index td,
	table.index th {
		padding: 0.4em;
	}

	table.index tr:hover td:not([rowspan]),
	table.index tr:hover th:not([rowspan]) {
		background: #f7f8f9;
	}

	/* The link in the first column in the property table (formerly a TD) */
	table.index th:first-child a {
		font-weight: bold;
	}

/******************************************************************************/
/*                                    Print                                   */
/******************************************************************************/

	@media print {
		/* Pages have their own margins. */
		html {
			margin: 0;
		}
		/* Serif for print. */
		body {
			font-family: serif;
		}
	}
	@page {
		margin: 1.5cm 1.1cm;
	}

/******************************************************************************/
/*                                    Legacy                                  */
/******************************************************************************/

	/* This rule is inherited from past style sheets. No idea what it's for. */
	.hide { display: none }



/******************************************************************************/
/*                             Overflow Control                               */
/******************************************************************************/

	.figure .caption, .sidefigure .caption, figcaption {
		/* in case figure is overlarge, limit caption to 50em */
		max-width: 50rem;
		margin-left: auto;
		margin-right: auto;
	}
	.overlarge {
		/* Magic to create good table positioning:
		   "content column" is 50ems wide at max; less on smaller screens.
		   Extra space (after ToC + content) is empty on the right.

		   1. When table < content column, centers table in column.
		   2. When content < table < available, left-aligns.
		   3. When table > available, fills available + scroll bar.
		*/ 
		display: grid;
		grid-template-columns: minmax(0, 50em);
	}
	.overlarge > table {
		/* limit preferred width of table */
		max-width: 50em;
		margin-left: auto;
		margin-right: auto;
	}

	@media (min-width: 55em) {
		.overlarge {
			margin-right: calc(13px + 26.5rem - 50vw);
			max-width: none;
		}
	}
	@media screen and (min-width: 78em) {
		body:not(.toc-inline) .overlarge {
			/* 30.5em body padding 50em content area */
			margin-right: calc(40em - 50vw) !important;
		}
	}
	@media screen and (min-width: 90em) {
		body:not(.toc-inline) .overlarge {
			/* 4em html margin 30.5em body padding 50em content area */
			margin-right: calc(84.5em - 100vw) !important;
		}
	}

	@media not print {
		.overlarge {
			overflow-x: auto;
			/* See Lea Verou's explanation background-attachment:
			 * http://lea.verou.me/2012/04/background-attachment-local/
			 *
			background: top left  / 4em 100% linear-gradient(to right,  #ffffff, rgba(255, 255, 255, 0)) local,
			            top right / 4em 100% linear-gradient(to left, #ffffff, rgba(255, 255, 255, 0)) local,
			            top left  / 1em 100% linear-gradient(to right,  #c3c3c5, rgba(195, 195, 197, 0)) scroll,
			            top right / 1em 100% linear-gradient(to left, #c3c3c5, rgba(195, 195, 197, 0)) scroll,
			            white;
			background-repeat: no-repeat;
			*/
		}
	}
</style>
  <link href="https://www.w3.org/StyleSheets/TR/2016/cg-draft" rel="stylesheet">
  <link href="https://w3c.github.io/speech-api/" rel="canonical">
<style>/* style-md-lists */

/* This is a weird hack for me not yet following the commonmark spec
   regarding paragraph and lists. */
[data-md] > :first-child {
    margin-top: 0;
}
[data-md] > :last-child {
    margin-bottom: 0;
}</style>
<style>/* style-selflinks */

.heading, .issue, .note, .example, li, dt {
    position: relative;
}
a.self-link {
    position: absolute;
    top: 0;
    left: calc(-1 * (3.5rem - 26px));
    width: calc(3.5rem - 26px);
    height: 2em;
    text-align: center;
    border: none;
    transition: opacity .2s;
    opacity: .5;
}
a.self-link:hover {
    opacity: 1;
}
.heading > a.self-link {
    font-size: 83%;
}
li > a.self-link {
    left: calc(-1 * (3.5rem - 26px) - 2em);
}
dfn > a.self-link {
    top: auto;
    left: auto;
    opacity: 0;
    width: 1.5em;
    height: 1.5em;
    background: gray;
    color: white;
    font-style: normal;
    transition: opacity .2s, background-color .2s, color .2s;
}
dfn:hover > a.self-link {
    opacity: 1;
}
dfn > a.self-link:hover {
    color: black;
}

a.self-link::before            { content: "¶"; }
.heading > a.self-link::before { content: "§"; }
dfn > a.self-link::before      { content: "#"; }</style>
<style>/* style-counters */

body {
    counter-reset: example figure issue;
}
.issue {
    counter-increment: issue;
}
.issue:not(.no-marker)::before {
    content: "Issue " counter(issue);
}

.example {
    counter-increment: example;
}
.example:not(.no-marker)::before {
    content: "Example " counter(example);
}
.invalid.example:not(.no-marker)::before,
.illegal.example:not(.no-marker)::before {
    content: "Invalid Example" counter(example);
}

figcaption {
    counter-increment: figure;
}
figcaption:not(.no-marker)::before {
    content: "Figure " counter(figure) " ";
}</style>
<style>/* style-autolinks */

.css.css, .property.property, .descriptor.descriptor {
    color: #005a9c;
    font-size: inherit;
    font-family: inherit;
}
.css::before, .property::before, .descriptor::before {
    content: "‘";
}
.css::after, .property::after, .descriptor::after {
    content: "’";
}
.property, .descriptor {
    /* Don't wrap property and descriptor names */
    white-space: nowrap;
}
.type { /* CSS value <type> */
    font-style: italic;
}
pre .property::before, pre .property::after {
    content: "";
}
[data-link-type="property"]::before,
[data-link-type="propdesc"]::before,
[data-link-type="descriptor"]::before,
[data-link-type="value"]::before,
[data-link-type="function"]::before,
[data-link-type="at-rule"]::before,
[data-link-type="selector"]::before,
[data-link-type="maybe"]::before {
    content: "‘";
}
[data-link-type="property"]::after,
[data-link-type="propdesc"]::after,
[data-link-type="descriptor"]::after,
[data-link-type="value"]::after,
[data-link-type="function"]::after,
[data-link-type="at-rule"]::after,
[data-link-type="selector"]::after,
[data-link-type="maybe"]::after {
    content: "’";
}

[data-link-type].production::before,
[data-link-type].production::after,
.prod [data-link-type]::before,
.prod [data-link-type]::after {
    content: "";
}

[data-link-type=element],
[data-link-type=element-attr] {
    font-family: Menlo, Consolas, "DejaVu Sans Mono", monospace;
    font-size: .9em;
}
[data-link-type=element]::before { content: "<" }
[data-link-type=element]::after  { content: ">" }

[data-link-type=biblio] {
    white-space: pre;
}</style>
<style>/* style-dfn-panel */

.dfn-panel {
    position: absolute;
    z-index: 35;
    height: auto;
    width: -webkit-fit-content;
    width: fit-content;
    max-width: 300px;
    max-height: 500px;
    overflow: auto;
    padding: 0.5em 0.75em;
    font: small Helvetica Neue, sans-serif, Droid Sans Fallback;
    background: #DDDDDD;
    color: black;
    border: outset 0.2em;
}
.dfn-panel:not(.on) { display: none; }
.dfn-panel * { margin: 0; padding: 0; text-indent: 0; }
.dfn-panel > b { display: block; }
.dfn-panel a { color: black; }
.dfn-panel a:not(:hover) { text-decoration: none !important; border-bottom: none !important; }
.dfn-panel > b + b { margin-top: 0.25em; }
.dfn-panel ul { padding: 0; }
.dfn-panel li { list-style: inside; }
.dfn-panel.activated {
    display: inline-block;
    position: fixed;
    left: .5em;
    bottom: 2em;
    margin: 0 auto;
    max-width: calc(100vw - 1.5em - .4em - .5em);
    max-height: 30vh;
}

.dfn-paneled { cursor: pointer; }
</style>
<style>/* style-syntax-highlighting */
pre.idl.highlight { color: #708090; }
.highlight:not(.idl) { background: hsl(24, 20%, 95%); }
code.highlight { padding: .1em; border-radius: .3em; }
pre.highlight, pre > code.highlight { display: block; padding: 1em; margin: .5em 0; overflow: auto; border-radius: 0; }
c-[a] { color: #990055 } /* Keyword.Declaration */
c-[b] { color: #990055 } /* Keyword.Type */
c-[c] { color: #708090 } /* Comment */
c-[d] { color: #708090 } /* Comment.Multiline */
c-[e] { color: #0077aa } /* Name.Attribute */
c-[f] { color: #669900 } /* Name.Tag */
c-[g] { color: #222222 } /* Name.Variable */
c-[k] { color: #990055 } /* Keyword */
c-[l] { color: #000000 } /* Literal */
c-[m] { color: #000000 } /* Literal.Number */
c-[n] { color: #0077aa } /* Name */
c-[o] { color: #999999 } /* Operator */
c-[p] { color: #999999 } /* Punctuation */
c-[s] { color: #a67f59 } /* Literal.String */
c-[t] { color: #a67f59 } /* Literal.String.Single */
c-[u] { color: #a67f59 } /* Literal.String.Double */
c-[cp] { color: #708090 } /* Comment.Preproc */
c-[c1] { color: #708090 } /* Comment.Single */
c-[cs] { color: #708090 } /* Comment.Special */
c-[kc] { color: #990055 } /* Keyword.Constant */
c-[kn] { color: #990055 } /* Keyword.Namespace */
c-[kp] { color: #990055 } /* Keyword.Pseudo */
c-[kr] { color: #990055 } /* Keyword.Reserved */
c-[ld] { color: #000000 } /* Literal.Date */
c-[nc] { color: #0077aa } /* Name.Class */
c-[no] { color: #0077aa } /* Name.Constant */
c-[nd] { color: #0077aa } /* Name.Decorator */
c-[ni] { color: #0077aa } /* Name.Entity */
c-[ne] { color: #0077aa } /* Name.Exception */
c-[nf] { color: #0077aa } /* Name.Function */
c-[nl] { color: #0077aa } /* Name.Label */
c-[nn] { color: #0077aa } /* Name.Namespace */
c-[py] { color: #0077aa } /* Name.Property */
c-[ow] { color: #999999 } /* Operator.Word */
c-[mb] { color: #000000 } /* Literal.Number.Bin */
c-[mf] { color: #000000 } /* Literal.Number.Float */
c-[mh] { color: #000000 } /* Literal.Number.Hex */
c-[mi] { color: #000000 } /* Literal.Number.Integer */
c-[mo] { color: #000000 } /* Literal.Number.Oct */
c-[sb] { color: #a67f59 } /* Literal.String.Backtick */
c-[sc] { color: #a67f59 } /* Literal.String.Char */
c-[sd] { color: #a67f59 } /* Literal.String.Doc */
c-[se] { color: #a67f59 } /* Literal.String.Escape */
c-[sh] { color: #a67f59 } /* Literal.String.Heredoc */
c-[si] { color: #a67f59 } /* Literal.String.Interpol */
c-[sx] { color: #a67f59 } /* Literal.String.Other */
c-[sr] { color: #a67f59 } /* Literal.String.Regex */
c-[ss] { color: #a67f59 } /* Literal.String.Symbol */
c-[vc] { color: #0077aa } /* Name.Variable.Class */
c-[vg] { color: #0077aa } /* Name.Variable.Global */
c-[vi] { color: #0077aa } /* Name.Variable.Instance */
c-[il] { color: #000000 } /* Literal.Number.Integer.Long */
</style>
 <body class="h-entry">
  <div class="head">
   <p data-fill-with="logo"></p>
   <h1 class="p-name no-ref" id="title">Web Speech API</h1>
   <h2 class="no-num no-toc no-ref heading settled" id="subtitle"><span class="content">Draft Community Group Report, <time class="dt-updated" datetime="1970-01-01">1 January 1970</time></span></h2>
   <div data-fill-with="spec-metadata">
    <dl>
     <dt>This version:
     <dd><a class="u-url" href="https://w3c.github.io/speech-api/">https://w3c.github.io/speech-api/</a>
     <dt class="editor">Editors:
     <dd class="editor p-author h-card vcard"><span class="p-name fn">André Natal (Mozilla)</span>
     <dd class="editor p-author h-card vcard"><span class="p-name fn">Glen Shires (Google)</span>
     <dd class="editor p-author h-card vcard"><span class="p-name fn">Marcos Cáceres (Mozilla)</span>
     <dd class="editor p-author h-card vcard"><span class="p-name fn">Philip Jägenstedt (Google)</span>
     <dt class="editor">Former Editor:
     <dd class="editor p-author h-card vcard"><span class="p-name fn">Hans Wennborg (Google)</span>
     <dt>Tests:
     <dd><a href="https://github.com/web-platform-tests/wpt/tree/master/speech-api">web-platform-tests speech-api/</a> (<a href="https://github.com/web-platform-tests/wpt/labels/speech-api">ongoing work</a>)
    </dl>
   </div>
   <div data-fill-with="warning"></div>
   <p class="copyright" data-fill-with="copyright"><a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a> © 1970 the Contributors to the Web Speech API Specification, published by the <a href="http://www.w3.org/community/speech-api/">Speech API Community Group</a> under the <a href="https://www.w3.org/community/about/agreements/cla/">W3C Community Contributor License Agreement (CLA)</a>.
A human-readable <a href="http://www.w3.org/community/about/agreements/cla-deed/">summary</a> is available. </p>
   <hr title="Separator for header">
  </div>
  <div class="p-summary" data-fill-with="abstract">
   <h2 class="no-num no-toc no-ref heading settled" id="abstract"><span class="content">Abstract</span></h2>
   <p>This specification defines a JavaScript API to enable web developers to incorporate speech recognition and synthesis into their web pages.

It enables developers to use scripting to generate text-to-speech output and to use speech recognition as an input for forms, continuous dictation and control.
The JavaScript API allows web pages to control activation and timing and to handle results and alternatives.</p>
  </div>
  <div data-fill-with="at-risk"></div>
  <h2 class="no-num no-toc no-ref heading settled" id="status"><span class="content">Status of this document</span></h2>
  <div data-fill-with="status">
   <p>This specification was published by the <a href="http://www.w3.org/community/speech-api/">Speech API Community Group</a>. It is not a W3C Standard nor is it on the W3C Standards Track.
Please note that under the <a href="http://www.w3.org/community/about/agreements/cla/">W3C Community Contributor License Agreement (CLA)</a> there is a limited opt-out and other conditions apply.
Learn more about <a href="http://www.w3.org/community/">W3C Community and Business Groups</a>.</p>
   <p></p>
   <p>All feedback is welcome: public-speech-api@w3.org (<a href="https://lists.w3.org/Archives/Public/public-speech-api/">Public archive</a>).</p>
   <p></p>
  </div>
  <div data-fill-with="at-risk"></div>
  <nav data-fill-with="table-of-contents" id="toc">
   <h2 class="no-num no-toc no-ref" id="contents">Table of Contents</h2>
   <ol class="toc" role="directory">
    <li><a href="#introduction"><span class="secno">1</span> <span class="content">Introduction</span></a>
    <li><a href="#use_cases"><span class="secno">2</span> <span class="content">Use Cases</span></a>
    <li>
     <a href="#security"><span class="secno">3</span> <span class="content">Security and privacy considerations</span></a>
     <ol class="toc">
      <li><a href="#implementation-considerations"><span class="secno">3.1</span> <span class="content">Implementation considerations</span></a>
     </ol>
    <li>
     <a href="#api_description"><span class="secno">4</span> <span class="content">API Description</span></a>
     <ol class="toc">
      <li>
       <a href="#speechreco-section"><span class="secno">4.1</span> <span class="content">The SpeechRecognition Interface</span></a>
       <ol class="toc">
        <li><a href="#speechreco-attributes"><span class="secno">4.1.1</span> <span class="content">SpeechRecognition Attributes</span></a>
        <li><a href="#speechreco-methods"><span class="secno">4.1.2</span> <span class="content">SpeechRecognition Methods</span></a>
        <li><a href="#speechreco-events"><span class="secno">4.1.3</span> <span class="content">SpeechRecognition Events</span></a>
        <li><a href="#speechreco-error"><span class="secno">4.1.4</span> <span class="content">SpeechRecognitionErrorEvent</span></a>
        <li><a href="#speechreco-alternative"><span class="secno">4.1.5</span> <span class="content">SpeechRecognitionAlternative</span></a>
        <li><a href="#speechreco-result"><span class="secno">4.1.6</span> <span class="content">SpeechRecognitionResult</span></a>
        <li><a href="#speechreco-resultlist"><span class="secno">4.1.7</span> <span class="content">SpeechRecognitionResultList</span></a>
        <li><a href="#speechreco-event"><span class="secno">4.1.8</span> <span class="content">SpeechRecognitionEvent</span></a>
        <li><a href="#speechreco-speechgrammar"><span class="secno">4.1.9</span> <span class="content">SpeechGrammar</span></a>
        <li><a href="#speechreco-speechgrammarlist"><span class="secno">4.1.10</span> <span class="content">SpeechGrammarList</span></a>
       </ol>
      <li>
       <a href="#tts-section"><span class="secno">4.2</span> <span class="content">The SpeechSynthesis Interface</span></a>
       <ol class="toc">
        <li><a href="#tts-attributes"><span class="secno">4.2.1</span> <span class="content">SpeechSynthesis Attributes</span></a>
        <li><a href="#tts-methods"><span class="secno">4.2.2</span> <span class="content">SpeechSynthesis Methods</span></a>
        <li><a href="#tts-events"><span class="secno">4.2.3</span> <span class="content">SpeechSynthesis Events</span></a>
        <li><a href="#utterance-attributes"><span class="secno">4.2.4</span> <span class="content">SpeechSynthesisUtterance Attributes</span></a>
        <li><a href="#utterance-events"><span class="secno">4.2.5</span> <span class="content">SpeechSynthesisUtterance Events</span></a>
        <li><a href="#speechsynthesisevent-attributes"><span class="secno">4.2.6</span> <span class="content">SpeechSynthesisEvent Attributes</span></a>
        <li><a href="#speechsynthesiserrorevent-attributes"><span class="secno">4.2.7</span> <span class="content">SpeechSynthesisErrorEvent Attributes</span></a>
        <li><a href="#speechsynthesisvoice-attributes"><span class="secno">4.2.8</span> <span class="content">SpeechSynthesisVoice Attributes</span></a>
       </ol>
     </ol>
    <li>
     <a href="#examples"><span class="secno">5</span> <span class="content">Examples</span></a>
     <ol class="toc">
      <li><a href="#examples-recognition"><span class="secno">5.1</span> <span class="content">Speech Recognition Examples</span></a>
      <li><a href="#examples-synthesis"><span class="secno">5.2</span> <span class="content">Speech Synthesis Examples</span></a>
     </ol>
    <li><a href="#acknowledgments"><span class="secno"></span> <span class="content">Acknowledgments</span></a>
    <li><a href="#conformance"><span class="secno"></span> <span class="content"> Conformance</span></a>
    <li>
     <a href="#index"><span class="secno"></span> <span class="content">Index</span></a>
     <ol class="toc">
      <li><a href="#index-defined-here"><span class="secno"></span> <span class="content">Terms defined by this specification</span></a>
      <li><a href="#index-defined-elsewhere"><span class="secno"></span> <span class="content">Terms defined by reference</span></a>
     </ol>
    <li>
     <a href="#references"><span class="secno"></span> <span class="content">References</span></a>
     <ol class="toc">
      <li><a href="#normative"><span class="secno"></span> <span class="content">Normative References</span></a>
      <li><a href="#informative"><span class="secno"></span> <span class="content">Informative References</span></a>
     </ol>
    <li><a href="#idl-index"><span class="secno"></span> <span class="content">IDL Index</span></a>
    <li><a href="#issues-index"><span class="secno"></span> <span class="content">Issues Index</span></a>
   </ol>
  </nav>
  <main>
   <h2 class="heading settled" data-level="1" id="introduction"><span class="secno">1. </span><span class="content">Introduction</span><a class="self-link" href="#introduction"></a></h2>
   <p><em>This section is non-normative.</em></p>
   <p>The Web Speech API aims to enable web developers to provide, in a web browser, speech-input and text-to-speech output features that are typically not available when using standard speech-recognition or screen-reader software.
The API itself is agnostic of the underlying speech recognition and synthesis implementation and can support both server-based and client-based/embedded recognition and synthesis.
The API is designed to enable both brief (one-shot) speech input and continuous speech input.
Speech recognition results are provided to the web page as a list of hypotheses, along with other relevant information for each hypothesis.</p>
   <p>This specification is a subset of the API defined in the <a data-link-type="biblio" href="#biblio-htmlspeech">HTML Speech Incubator Group Final Report</a>.
That report is entirely informative since it is not a standards track document.
All portions of that report may be considered informative with regards to this document, and provide an informative background to this document.
This specification is a fully-functional subset of that report.
Specifically, this subset excludes the underlying transport protocol, the proposed additions to HTML markup, and it defines a simplified subset of the JavaScript API.
This subset supports the majority of use-cases and sample code in the Incubator Group Final Report.
This subset does not preclude future standardization of additions to the markup, API or underlying transport protocols, and indeed the Incubator Report defines a potential roadmap for such future work.</p>
   <h2 class="heading settled" data-level="2" id="use_cases"><span class="secno">2. </span><span class="content">Use Cases</span><a class="self-link" href="#use_cases"></a></h2>
   <p><em>This section is non-normative.</em></p>
   <p>This specification supports the following use cases, as defined in <a href="https://www.w3.org/2005/Incubator/htmlspeech/XGR-htmlspeech-20111206/#use-cases">Section 4 of the Incubator Report</a>.</p>
   <ul>
    <li>Voice Web Search
    <li>Speech Command Interface
    <li>Domain Specific Grammars Contingent on Earlier Inputs
    <li>Continuous Recognition of Open Dialog
    <li>Domain Specific Grammars Filling Multiple Input Fields
    <li>Speech UI present when no visible UI need be present
    <li>Voice Activity Detection
    <li>Temporal Structure of Synthesis to Provide Visual Feedback
    <li>Hello World
    <li>Speech Translation
    <li>Speech Enabled Email Client
    <li>Dialog Systems
    <li>Multimodal Interaction
    <li>Speech Driving Directions
    <li>Multimodal Video Game
    <li>Multimodal Search
   </ul>
   <p>To keep the API to a minimum, this specification does not directly support the following use case.
This does not preclude adding support for this as a future API enhancement, and indeed the Incubator report provides a roadmap for doing so.</p>
   <ul>
    <li>Rerecognition
   </ul>
   <p>Note that for many usages and implementations, it is possible to avoid the need for Rerecognition by using a larger grammar, or by combining multiple grammars — both of these techniques are supported in this specification.</p>
   <h2 class="heading settled" data-level="3" id="security"><span class="secno">3. </span><span class="content">Security and privacy considerations</span><a class="self-link" href="#security"></a></h2>
   <ol>
    <li>
     User agents must only start speech input sessions with explicit, informed user consent.
  User consent can include, for example: 
     <ul>
      <li>User click on a visible speech input element which has an obvious graphical representation showing that it will start speech input.
      <li>Accepting a permission prompt shown as the result of a call to <code>SpeechRecognition.start</code>.
      <li>Consent previously granted to always allow speech input for this web page.
     </ul>
    <li>
     User agents must give the user an obvious indication when audio is being recorded. 
     <ul>
      <li>In a graphical user agent, this could be a mandatory notification displayed by the user agent as part of its chrome and not accessible by the web page.
    This could for example be a pulsating/blinking record icon as part of the browser chrome/address bar, an indication in the status bar, an audible notification, or anything else relevant and accessible to the user.
    This UI element must also allow the user to stop recording.<br> <img alt="Example UI recording notification." src="ui-example.png">
      <li>In a speech-only user agent, the indication may for example take the form of the system speaking the label of the speech input element, followed by a short beep.
     </ul>
    <li>The user agent may also give the user a longer explanation the first time speech input is used, to let the user know what it is and how they can tune their privacy settings to disable speech recording if required.
   </ol>
   <h3 class="heading settled" data-level="3.1" id="implementation-considerations"><span class="secno">3.1. </span><span class="content">Implementation considerations</span><a class="self-link" href="#implementation-considerations"></a></h3>
   <p><em>This section is non-normative.</em></p>
   <ol>
    <li>Spoken password inputs can be problematic from a security perspective, but it is up to the user to decide if they want to speak their password.
    <li>Speech input could potentially be used to eavesdrop on users.
  Malicious webpages could use tricks such as hiding the input element or otherwise making the user believe that it has stopped recording speech while continuing to do so.
  They could also potentially style the input element to appear as something else and trick the user into clicking them.
  An example of styling the file input element can be seen at <a href="https://www.quirksmode.org/dom/inputfile.html">https://www.quirksmode.org/dom/inputfile.html</a>.
  The above recommendations are intended to reduce this risk of such attacks.
   </ol>
   <h2 class="heading settled" data-level="4" id="api_description"><span class="secno">4. </span><span class="content">API Description</span><a class="self-link" href="#api_description"></a></h2>
   <p><em>This section is normative.</em></p>
   <h3 class="heading settled" data-level="4.1" id="speechreco-section"><span class="secno">4.1. </span><span class="content">The SpeechRecognition Interface</span><a class="self-link" href="#speechreco-section"></a></h3>
   <p>The speech recognition interface is the scripted web API for controlling a given recognition.</p>
    The term "final result" indicates a SpeechRecognitionResult in which the final attribute is true.
The term "interim result" indicates a SpeechRecognitionResult in which the final attribute is false. 
<pre class="idl highlight def">[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <dfn class="idl-code" data-dfn-type="interface" data-export id="speechrecognition"><code><c- g>SpeechRecognition</c-></code><a class="self-link" href="#speechrecognition"></a></dfn> : <a class="n" data-link-type="idl-name" href="https://dom.spec.whatwg.org/#eventtarget" id="ref-for-eventtarget"><c- n>EventTarget</c-></a> {
    <dfn class="idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="constructor" data-export data-lt="SpeechRecognition()|constructor()" id="dom-speechrecognition-speechrecognition"><code><c- g>constructor</c-></code><a class="self-link" href="#dom-speechrecognition-speechrecognition"></a></dfn>();

    // recognition parameters
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="#speechgrammarlist" id="ref-for-speechgrammarlist"><c- n>SpeechGrammarList</c-></a> <a class="idl-code" data-link-type="attribute" data-type="SpeechGrammarList" href="#dom-speechrecognition-grammars" id="ref-for-dom-speechrecognition-grammars"><c- g>grammars</c-></a>;
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-type="DOMString" href="#dom-speechrecognition-lang" id="ref-for-dom-speechrecognition-lang"><c- g>lang</c-></a>;
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean"><c- b>boolean</c-></a> <a class="idl-code" data-link-type="attribute" data-type="boolean" href="#dom-speechrecognition-continuous" id="ref-for-dom-speechrecognition-continuous"><c- g>continuous</c-></a>;
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean①"><c- b>boolean</c-></a> <a class="idl-code" data-link-type="attribute" data-type="boolean" href="#dom-speechrecognition-interimresults" id="ref-for-dom-speechrecognition-interimresults"><c- g>interimResults</c-></a>;
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long"><c- b>unsigned</c-> <c- b>long</c-></a> <a class="idl-code" data-link-type="attribute" data-type="unsigned long" href="#dom-speechrecognition-maxalternatives" id="ref-for-dom-speechrecognition-maxalternatives"><c- g>maxAlternatives</c-></a>;

    // methods to drive the speech interaction
    <c- b>void</c-> <a class="idl-code" data-link-type="method" href="#dom-speechrecognition-start" id="ref-for-dom-speechrecognition-start"><c- g>start</c-></a>();
    <c- b>void</c-> <a class="idl-code" data-link-type="method" href="#dom-speechrecognition-stop" id="ref-for-dom-speechrecognition-stop"><c- g>stop</c-></a>();
    <c- b>void</c-> <a class="idl-code" data-link-type="method" href="#dom-speechrecognition-abort" id="ref-for-dom-speechrecognition-abort"><c- g>abort</c-></a>();

    // event methods
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler"><c- n>EventHandler</c-></a> <dfn class="idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="attribute" data-export data-type="EventHandler" id="dom-speechrecognition-onaudiostart"><code><c- g>onaudiostart</c-></code><a class="self-link" href="#dom-speechrecognition-onaudiostart"></a></dfn>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①"><c- n>EventHandler</c-></a> <dfn class="idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="attribute" data-export data-type="EventHandler" id="dom-speechrecognition-onsoundstart"><code><c- g>onsoundstart</c-></code><a class="self-link" href="#dom-speechrecognition-onsoundstart"></a></dfn>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler②"><c- n>EventHandler</c-></a> <dfn class="idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="attribute" data-export data-type="EventHandler" id="dom-speechrecognition-onspeechstart"><code><c- g>onspeechstart</c-></code><a class="self-link" href="#dom-speechrecognition-onspeechstart"></a></dfn>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler③"><c- n>EventHandler</c-></a> <dfn class="idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="attribute" data-export data-type="EventHandler" id="dom-speechrecognition-onspeechend"><code><c- g>onspeechend</c-></code><a class="self-link" href="#dom-speechrecognition-onspeechend"></a></dfn>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler④"><c- n>EventHandler</c-></a> <dfn class="idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="attribute" data-export data-type="EventHandler" id="dom-speechrecognition-onsoundend"><code><c- g>onsoundend</c-></code><a class="self-link" href="#dom-speechrecognition-onsoundend"></a></dfn>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler⑤"><c- n>EventHandler</c-></a> <dfn class="idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="attribute" data-export data-type="EventHandler" id="dom-speechrecognition-onaudioend"><code><c- g>onaudioend</c-></code><a class="self-link" href="#dom-speechrecognition-onaudioend"></a></dfn>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler⑥"><c- n>EventHandler</c-></a> <dfn class="idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="attribute" data-export data-type="EventHandler" id="dom-speechrecognition-onresult"><code><c- g>onresult</c-></code><a class="self-link" href="#dom-speechrecognition-onresult"></a></dfn>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler⑦"><c- n>EventHandler</c-></a> <dfn class="idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="attribute" data-export data-type="EventHandler" id="dom-speechrecognition-onnomatch"><code><c- g>onnomatch</c-></code><a class="self-link" href="#dom-speechrecognition-onnomatch"></a></dfn>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler⑧"><c- n>EventHandler</c-></a> <dfn class="idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="attribute" data-export data-type="EventHandler" id="dom-speechrecognition-onerror"><code><c- g>onerror</c-></code><a class="self-link" href="#dom-speechrecognition-onerror"></a></dfn>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler⑨"><c- n>EventHandler</c-></a> <dfn class="idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="attribute" data-export data-type="EventHandler" id="dom-speechrecognition-onstart"><code><c- g>onstart</c-></code><a class="self-link" href="#dom-speechrecognition-onstart"></a></dfn>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①⓪"><c- n>EventHandler</c-></a> <dfn class="idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="attribute" data-export data-type="EventHandler" id="dom-speechrecognition-onend"><code><c- g>onend</c-></code><a class="self-link" href="#dom-speechrecognition-onend"></a></dfn>;
};

<c- b>enum</c-> <dfn class="dfn-paneled idl-code" data-dfn-type="enum" data-export id="enumdef-speechrecognitionerrorcode"><code><c- g>SpeechRecognitionErrorCode</c-></code></dfn> {
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechrecognitionerrorcode-no-speech" id="ref-for-dom-speechrecognitionerrorcode-no-speech"><c- s>"no-speech"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechrecognitionerrorcode-aborted" id="ref-for-dom-speechrecognitionerrorcode-aborted"><c- s>"aborted"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechrecognitionerrorcode-audio-capture" id="ref-for-dom-speechrecognitionerrorcode-audio-capture"><c- s>"audio-capture"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechrecognitionerrorcode-network" id="ref-for-dom-speechrecognitionerrorcode-network"><c- s>"network"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechrecognitionerrorcode-not-allowed" id="ref-for-dom-speechrecognitionerrorcode-not-allowed"><c- s>"not-allowed"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechrecognitionerrorcode-service-not-allowed" id="ref-for-dom-speechrecognitionerrorcode-service-not-allowed"><c- s>"service-not-allowed"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechrecognitionerrorcode-bad-grammar" id="ref-for-dom-speechrecognitionerrorcode-bad-grammar"><c- s>"bad-grammar"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechrecognitionerrorcode-language-not-supported" id="ref-for-dom-speechrecognitionerrorcode-language-not-supported"><c- s>"language-not-supported"</c-></a>
};

[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed①"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export id="speechrecognitionerrorevent"><code><c- g>SpeechRecognitionErrorEvent</c-></code></dfn> : <a class="n" data-link-type="idl-name" href="https://dom.spec.whatwg.org/#event" id="ref-for-event"><c- n>Event</c-></a> {
    <dfn class="idl-code" data-dfn-for="SpeechRecognitionErrorEvent" data-dfn-type="constructor" data-export data-lt="SpeechRecognitionErrorEvent(type, eventInitDict)|constructor(type, eventInitDict)" id="dom-speechrecognitionerrorevent-speechrecognitionerrorevent"><code><c- g>constructor</c-></code><a class="self-link" href="#dom-speechrecognitionerrorevent-speechrecognitionerrorevent"></a></dfn>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①"><c- b>DOMString</c-></a> <dfn class="idl-code" data-dfn-for="SpeechRecognitionErrorEvent/SpeechRecognitionErrorEvent(type, eventInitDict), SpeechRecognitionErrorEvent/constructor(type, eventInitDict)" data-dfn-type="argument" data-export id="dom-speechrecognitionerrorevent-speechrecognitionerrorevent-type-eventinitdict-type"><code><c- g>type</c-></code><a class="self-link" href="#dom-speechrecognitionerrorevent-speechrecognitionerrorevent-type-eventinitdict-type"></a></dfn>, <a class="n" data-link-type="idl-name" href="#dictdef-speechrecognitionerroreventinit" id="ref-for-dictdef-speechrecognitionerroreventinit"><c- n>SpeechRecognitionErrorEventInit</c-></a> <dfn class="idl-code" data-dfn-for="SpeechRecognitionErrorEvent/SpeechRecognitionErrorEvent(type, eventInitDict), SpeechRecognitionErrorEvent/constructor(type, eventInitDict)" data-dfn-type="argument" data-export id="dom-speechrecognitionerrorevent-speechrecognitionerrorevent-type-eventinitdict-eventinitdict"><code><c- g>eventInitDict</c-></code><a class="self-link" href="#dom-speechrecognitionerrorevent-speechrecognitionerrorevent-type-eventinitdict-eventinitdict"></a></dfn>);
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="#enumdef-speechrecognitionerrorcode" id="ref-for-enumdef-speechrecognitionerrorcode"><c- n>SpeechRecognitionErrorCode</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="SpeechRecognitionErrorCode" href="#dom-speechrecognitionerrorevent-error" id="ref-for-dom-speechrecognitionerrorevent-error"><c- g>error</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString②"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="DOMString" href="#dom-speechrecognitionerrorevent-message" id="ref-for-dom-speechrecognitionerrorevent-message"><c- g>message</c-></a>;
};

<c- b>dictionary</c-> <dfn class="dfn-paneled idl-code" data-dfn-type="dictionary" data-export id="dictdef-speechrecognitionerroreventinit"><code><c- g>SpeechRecognitionErrorEventInit</c-></code></dfn> : <a class="n" data-link-type="idl-name" href="https://dom.spec.whatwg.org/#dictdef-eventinit" id="ref-for-dictdef-eventinit"><c- n>EventInit</c-></a> {
    <c- b>required</c-> <a class="n" data-link-type="idl-name" href="#enumdef-speechrecognitionerrorcode" id="ref-for-enumdef-speechrecognitionerrorcode①"><c- n>SpeechRecognitionErrorCode</c-></a> <dfn class="idl-code" data-dfn-for="SpeechRecognitionErrorEventInit" data-dfn-type="dict-member" data-export data-type="SpeechRecognitionErrorCode " id="dom-speechrecognitionerroreventinit-error"><code><c- g>error</c-></code><a class="self-link" href="#dom-speechrecognitionerroreventinit-error"></a></dfn>;
    <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString③"><c- b>DOMString</c-></a> <dfn class="idl-code" data-default="&quot;&quot;" data-dfn-for="SpeechRecognitionErrorEventInit" data-dfn-type="dict-member" data-export data-type="DOMString " id="dom-speechrecognitionerroreventinit-message"><code><c- g>message</c-></code><a class="self-link" href="#dom-speechrecognitionerroreventinit-message"></a></dfn> = "";
};

// Item in N-best list
[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed②"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export id="speechrecognitionalternative"><code><c- g>SpeechRecognitionAlternative</c-></code></dfn> {
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString④"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="DOMString" href="#dom-speechrecognitionalternative-transcript" id="ref-for-dom-speechrecognitionalternative-transcript"><c- g>transcript</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float"><c- b>float</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="float" href="#dom-speechrecognitionalternative-confidence" id="ref-for-dom-speechrecognitionalternative-confidence"><c- g>confidence</c-></a>;
};

// A complete one-shot simple response
[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed③"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export id="speechrecognitionresult"><code><c- g>SpeechRecognitionResult</c-></code></dfn> {
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long①"><c- b>unsigned</c-> <c- b>long</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="unsigned long" href="#dom-speechrecognitionresult-length" id="ref-for-dom-speechrecognitionresult-length"><c- g>length</c-></a>;
    <c- b>getter</c-> <a class="n" data-link-type="idl-name" href="#speechrecognitionalternative" id="ref-for-speechrecognitionalternative"><c- n>SpeechRecognitionAlternative</c-></a> <a class="idl-code" data-link-type="method" href="#dom-speechrecognitionresult-item" id="ref-for-dom-speechrecognitionresult-item"><c- g>item</c-></a>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long②"><c- b>unsigned</c-> <c- b>long</c-></a> <dfn class="idl-code" data-dfn-for="SpeechRecognitionResult/item(index)" data-dfn-type="argument" data-export id="dom-speechrecognitionresult-item-index-index"><code><c- g>index</c-></code><a class="self-link" href="#dom-speechrecognitionresult-item-index-index"></a></dfn>);
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean②"><c- b>boolean</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="boolean" href="#dom-speechrecognitionresult-isfinal" id="ref-for-dom-speechrecognitionresult-isfinal"><c- g>isFinal</c-></a>;
};

// A collection of responses (used in continuous mode)
[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed④"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export id="speechrecognitionresultlist"><code><c- g>SpeechRecognitionResultList</c-></code></dfn> {
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long③"><c- b>unsigned</c-> <c- b>long</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="unsigned long" href="#dom-speechrecognitionresultlist-length" id="ref-for-dom-speechrecognitionresultlist-length"><c- g>length</c-></a>;
    <c- b>getter</c-> <a class="n" data-link-type="idl-name" href="#speechrecognitionresult" id="ref-for-speechrecognitionresult"><c- n>SpeechRecognitionResult</c-></a> <a class="idl-code" data-link-type="method" href="#dom-speechrecognitionresultlist-item" id="ref-for-dom-speechrecognitionresultlist-item"><c- g>item</c-></a>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long④"><c- b>unsigned</c-> <c- b>long</c-></a> <dfn class="idl-code" data-dfn-for="SpeechRecognitionResultList/item(index)" data-dfn-type="argument" data-export id="dom-speechrecognitionresultlist-item-index-index"><code><c- g>index</c-></code><a class="self-link" href="#dom-speechrecognitionresultlist-item-index-index"></a></dfn>);
};

// A full response, which could be interim or final, part of a continuous response or not
[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed⑤"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export id="speechrecognitionevent"><code><c- g>SpeechRecognitionEvent</c-></code></dfn> : <a class="n" data-link-type="idl-name" href="https://dom.spec.whatwg.org/#event" id="ref-for-event①"><c- n>Event</c-></a> {
    <dfn class="idl-code" data-dfn-for="SpeechRecognitionEvent" data-dfn-type="constructor" data-export data-lt="SpeechRecognitionEvent(type, eventInitDict)|constructor(type, eventInitDict)" id="dom-speechrecognitionevent-speechrecognitionevent"><code><c- g>constructor</c-></code><a class="self-link" href="#dom-speechrecognitionevent-speechrecognitionevent"></a></dfn>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString⑤"><c- b>DOMString</c-></a> <dfn class="idl-code" data-dfn-for="SpeechRecognitionEvent/SpeechRecognitionEvent(type, eventInitDict), SpeechRecognitionEvent/constructor(type, eventInitDict)" data-dfn-type="argument" data-export id="dom-speechrecognitionevent-speechrecognitionevent-type-eventinitdict-type"><code><c- g>type</c-></code><a class="self-link" href="#dom-speechrecognitionevent-speechrecognitionevent-type-eventinitdict-type"></a></dfn>, <a class="n" data-link-type="idl-name" href="#dictdef-speechrecognitioneventinit" id="ref-for-dictdef-speechrecognitioneventinit"><c- n>SpeechRecognitionEventInit</c-></a> <dfn class="idl-code" data-dfn-for="SpeechRecognitionEvent/SpeechRecognitionEvent(type, eventInitDict), SpeechRecognitionEvent/constructor(type, eventInitDict)" data-dfn-type="argument" data-export id="dom-speechrecognitionevent-speechrecognitionevent-type-eventinitdict-eventinitdict"><code><c- g>eventInitDict</c-></code><a class="self-link" href="#dom-speechrecognitionevent-speechrecognitionevent-type-eventinitdict-eventinitdict"></a></dfn>);
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long⑤"><c- b>unsigned</c-> <c- b>long</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="unsigned long" href="#dom-speechrecognitionevent-resultindex" id="ref-for-dom-speechrecognitionevent-resultindex"><c- g>resultIndex</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="#speechrecognitionresultlist" id="ref-for-speechrecognitionresultlist"><c- n>SpeechRecognitionResultList</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="SpeechRecognitionResultList" href="#dom-speechrecognitionevent-results" id="ref-for-dom-speechrecognitionevent-results"><c- g>results</c-></a>;
};

<c- b>dictionary</c-> <dfn class="dfn-paneled idl-code" data-dfn-type="dictionary" data-export id="dictdef-speechrecognitioneventinit"><code><c- g>SpeechRecognitionEventInit</c-></code></dfn> : <a class="n" data-link-type="idl-name" href="https://dom.spec.whatwg.org/#dictdef-eventinit" id="ref-for-dictdef-eventinit①"><c- n>EventInit</c-></a> {
    <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long⑥"><c- b>unsigned</c-> <c- b>long</c-></a> <dfn class="idl-code" data-default="0" data-dfn-for="SpeechRecognitionEventInit" data-dfn-type="dict-member" data-export data-type="unsigned long " id="dom-speechrecognitioneventinit-resultindex"><code><c- g>resultIndex</c-></code><a class="self-link" href="#dom-speechrecognitioneventinit-resultindex"></a></dfn> = 0;
    <c- b>required</c-> <a class="n" data-link-type="idl-name" href="#speechrecognitionresultlist" id="ref-for-speechrecognitionresultlist①"><c- n>SpeechRecognitionResultList</c-></a> <dfn class="idl-code" data-dfn-for="SpeechRecognitionEventInit" data-dfn-type="dict-member" data-export data-type="SpeechRecognitionResultList " id="dom-speechrecognitioneventinit-results"><code><c- g>results</c-></code><a class="self-link" href="#dom-speechrecognitioneventinit-results"></a></dfn>;
};

// The object representing a speech grammar
[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed⑥"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export id="speechgrammar"><code><c- g>SpeechGrammar</c-></code></dfn> {
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString⑥"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-type="DOMString" href="#dom-speechgrammar-src" id="ref-for-dom-speechgrammar-src"><c- g>src</c-></a>;
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float①"><c- b>float</c-></a> <a class="idl-code" data-link-type="attribute" data-type="float" href="#dom-speechgrammar-weight" id="ref-for-dom-speechgrammar-weight"><c- g>weight</c-></a>;
};

// The object representing a speech grammar collection
[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed⑦"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export id="speechgrammarlist"><code><c- g>SpeechGrammarList</c-></code></dfn> {
    <dfn class="idl-code" data-dfn-for="SpeechGrammarList" data-dfn-type="constructor" data-export data-lt="SpeechGrammarList()|constructor()" id="dom-speechgrammarlist-speechgrammarlist"><code><c- g>constructor</c-></code><a class="self-link" href="#dom-speechgrammarlist-speechgrammarlist"></a></dfn>();
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long⑦"><c- b>unsigned</c-> <c- b>long</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="unsigned long" href="#dom-speechgrammarlist-length" id="ref-for-dom-speechgrammarlist-length"><c- g>length</c-></a>;
    <c- b>getter</c-> <a class="n" data-link-type="idl-name" href="#speechgrammar" id="ref-for-speechgrammar"><c- n>SpeechGrammar</c-></a> <a class="idl-code" data-link-type="method" href="#dom-speechgrammarlist-item" id="ref-for-dom-speechgrammarlist-item"><c- g>item</c-></a>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long⑧"><c- b>unsigned</c-> <c- b>long</c-></a> <dfn class="idl-code" data-dfn-for="SpeechGrammarList/item(index)" data-dfn-type="argument" data-export id="dom-speechgrammarlist-item-index-index"><code><c- g>index</c-></code><a class="self-link" href="#dom-speechgrammarlist-item-index-index"></a></dfn>);
    <c- b>void</c-> <a class="idl-code" data-link-type="method" href="#dom-speechgrammarlist-addfromuri" id="ref-for-dom-speechgrammarlist-addfromuri"><c- g>addFromURI</c-></a>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString⑦"><c- b>DOMString</c-></a> <dfn class="idl-code" data-dfn-for="SpeechGrammarList/addFromURI(src, weight), SpeechGrammarList/addFromURI(src)" data-dfn-type="argument" data-export id="dom-speechgrammarlist-addfromuri-src-weight-src"><code><c- g>src</c-></code><a class="self-link" href="#dom-speechgrammarlist-addfromuri-src-weight-src"></a></dfn>,
                    <c- b>optional</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float②"><c- b>float</c-></a> <dfn class="idl-code" data-dfn-for="SpeechGrammarList/addFromURI(src, weight), SpeechGrammarList/addFromURI(src)" data-dfn-type="argument" data-export id="dom-speechgrammarlist-addfromuri-src-weight-weight"><code><c- g>weight</c-></code><a class="self-link" href="#dom-speechgrammarlist-addfromuri-src-weight-weight"></a></dfn> = 1.0);
    <c- b>void</c-> <a class="idl-code" data-link-type="method" href="#dom-speechgrammarlist-addfromstring" id="ref-for-dom-speechgrammarlist-addfromstring"><c- g>addFromString</c-></a>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString⑧"><c- b>DOMString</c-></a> <dfn class="idl-code" data-dfn-for="SpeechGrammarList/addFromString(string, weight), SpeechGrammarList/addFromString(string)" data-dfn-type="argument" data-export id="dom-speechgrammarlist-addfromstring-string-weight-string"><code><c- g>string</c-></code><a class="self-link" href="#dom-speechgrammarlist-addfromstring-string-weight-string"></a></dfn>,
                    <c- b>optional</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float③"><c- b>float</c-></a> <dfn class="idl-code" data-dfn-for="SpeechGrammarList/addFromString(string, weight), SpeechGrammarList/addFromString(string)" data-dfn-type="argument" data-export id="dom-speechgrammarlist-addfromstring-string-weight-weight"><code><c- g>weight</c-></code><a class="self-link" href="#dom-speechgrammarlist-addfromstring-string-weight-weight"></a></dfn> = 1.0);
};
</pre>
   <h4 class="heading settled" data-level="4.1.1" id="speechreco-attributes"><span class="secno">4.1.1. </span><span class="content">SpeechRecognition Attributes</span><a class="self-link" href="#speechreco-attributes"></a></h4>
   <dl>
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="attribute" data-export id="dom-speechrecognition-grammars"><code>grammars</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="#speechgrammarlist" id="ref-for-speechgrammarlist①">SpeechGrammarList</a></span>
    <dd>The grammars attribute stores the collection of SpeechGrammar objects which represent the grammars that are active for this recognition.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="attribute" data-export id="dom-speechrecognition-lang"><code>lang</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString⑨">DOMString</a></span>
    <dd>This attribute will set the language of the recognition for the request, using a valid BCP 47 language tag. <a data-link-type="biblio" href="#biblio-bcp47">[BCP47]</a> If unset it remains unset for getting in script, but will default to use the <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/dom.html#language" id="ref-for-language">language</a> of the html document root element and associated hierarchy.
  This default value is computed and used when the input request opens a connection to the recognition service.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="attribute" data-export id="dom-speechrecognition-continuous"><code>continuous</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean③">boolean</a></span>
    <dd>When the continuous attribute is set to false, the user agent must return no more than one final result in response to starting recognition,
  for example a single turn pattern of interaction.
  When the continuous attribute is set to true, the user agent must return zero or more final results representing multiple consecutive recognitions in response to starting recognition,
  for example a dictation.
  The default value must be false.  Note, this attribute setting does not affect interim results.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="attribute" data-export id="dom-speechrecognition-interimresults"><code>interimResults</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean④">boolean</a></span>
    <dd>Controls whether interim results are returned.
  When set to true, interim results should be returned.
  When set to false, interim results must not be returned.
  The default value must be false. Note, this attribute setting does not affect final results.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="attribute" data-export id="dom-speechrecognition-maxalternatives"><code>maxAlternatives</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long⑨">unsigned long</a></span>
    <dd>This attribute will set the maximum number of <code class="idl"><a data-link-type="idl" href="#speechrecognitionalternative" id="ref-for-speechrecognitionalternative①">SpeechRecognitionAlternative</a></code>s per result.
  The default value is 1.
   </dl>
   <p class="issue" id="issue-2c77f5e1"><a class="self-link" href="#issue-2c77f5e1"></a>The group has discussed whether WebRTC might be used to specify selection of audio sources and remote recognizers.
See <a href="https://lists.w3.org/Archives/Public/public-speech-api/2012Sep/0072.html">Interacting with WebRTC, the Web Audio API and other external sources</a> thread on public-speech-api@w3.org.</p>
   <h4 class="heading settled" data-level="4.1.2" id="speechreco-methods"><span class="secno">4.1.2. </span><span class="content">SpeechRecognition Methods</span><a class="self-link" href="#speechreco-methods"></a></h4>
   <dl>
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="method" data-export id="dom-speechrecognition-start"><code>start()</code></dfn> method
    <dd>When the start method is called it represents the moment in time the web application wishes to begin recognition.
  When the speech input is streaming live through the input media stream, then this start call represents the moment in time that the service must begin to listen and try to match the grammars associated with this request.
  Once the system is successfully listening to the recognition the user agent must raise a start event.
  If the start method is called on an already started object (that is, start has previously been called, and no <a class="idl-code" data-link-type="event" href="#eventdef-speechrecognition-error" id="ref-for-eventdef-speechrecognition-error">error</a> or <a class="idl-code" data-link-type="event" href="#eventdef-speechrecognition-end" id="ref-for-eventdef-speechrecognition-end">end</a> event has fired on the object), the user agent must throw an "<code class="idl"><a class="idl-code" data-link-type="exception" href="https://heycam.github.io/webidl/#invalidstateerror" id="ref-for-invalidstateerror">InvalidStateError</a></code>" <code class="idl"><a data-link-type="idl" href="https://heycam.github.io/webidl/#idl-DOMException" id="ref-for-idl-DOMException">DOMException</a></code> and ignore the call.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="method" data-export id="dom-speechrecognition-stop"><code>stop()</code></dfn> method
    <dd>The stop method represents an instruction to the recognition service to stop listening to more audio, and to try and return a result using just the audio that it has already received for this recognition.
  A typical use of the stop method might be for a web application where the end user is doing the end pointing, similar to a walkie-talkie.
  The end user might press and hold the space bar to talk to the system and on the space down press the start call would have occurred and when the space bar is released the stop method is called to ensure that the system is no longer listening to the user.
  Once the stop method is called the speech service must not collect additional audio and must not continue to listen to the user.
  The speech service must attempt to return a recognition result (or a nomatch) based on the audio that it has already collected for this recognition.
  If the stop method is called on an object which is already stopped or being stopped (that is, start was never called on it, the <a class="idl-code" data-link-type="event" href="#eventdef-speechrecognition-end" id="ref-for-eventdef-speechrecognition-end①">end</a> or <a class="idl-code" data-link-type="event" href="#eventdef-speechrecognition-error" id="ref-for-eventdef-speechrecognition-error①">error</a> event has fired on it, or stop was previously called on it), the user agent must ignore the call.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="method" data-export id="dom-speechrecognition-abort"><code>abort()</code></dfn> method
    <dd>The abort method is a request to immediately stop listening and stop recognizing and do not return any information but that the system is done.
  When the abort method is called, the speech service must stop recognizing.
  The user agent must raise an <a class="idl-code" data-link-type="event" href="#eventdef-speechrecognition-end" id="ref-for-eventdef-speechrecognition-end②">end</a> event once the speech service is no longer connected.
  If the abort method is called on an object which is already stopped or aborting (that is, start was never called on it, the <a class="idl-code" data-link-type="event" href="#eventdef-speechrecognition-end" id="ref-for-eventdef-speechrecognition-end③">end</a> or <a class="idl-code" data-link-type="event" href="#eventdef-speechrecognition-error" id="ref-for-eventdef-speechrecognition-error②">error</a> event has fired on it, or abort was previously called on it), the user agent must ignore the call.
   </dl>
   <h4 class="heading settled" data-level="4.1.3" id="speechreco-events"><span class="secno">4.1.3. </span><span class="content">SpeechRecognition Events</span><a class="self-link" href="#speechreco-events"></a></h4>
   <p>The DOM Level 2 Event Model is used for speech recognition events.
The methods in the EventTarget interface should be used for registering event listeners.
The SpeechRecognition interface also contains convenience attributes for registering a single event handler for each event type.
The events do not bubble and are not cancelable.</p>
   <p>For all these events, the timeStamp attribute defined in the DOM Level 2 Event interface must be set to the best possible estimate of when the real-world event which the event object represents occurred.
This timestamp must be represented in the user agent’s view of time, even for events where the timestamps in question could be raised on a different machine like a remote recognition service (i.e., in a <a class="idl-code" data-link-type="event" href="#eventdef-speechrecognition-speechend" id="ref-for-eventdef-speechrecognition-speechend">speechend</a> event with a remote speech endpointer).</p>
   <p>Unless specified below, the ordering of the different events is undefined.
For example, some implementations may fire <a class="idl-code" data-link-type="event" href="#eventdef-speechrecognition-audioend" id="ref-for-eventdef-speechrecognition-audioend">audioend</a> before <a class="idl-code" data-link-type="event" href="#eventdef-speechrecognition-speechstart" id="ref-for-eventdef-speechrecognition-speechstart">speechstart</a> or <a class="idl-code" data-link-type="event" href="#eventdef-speechrecognition-speechend" id="ref-for-eventdef-speechrecognition-speechend①">speechend</a> if the audio detector is client-side and the speech detector is server-side.</p>
   <dl>
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="event" data-export id="eventdef-speechrecognition-audiostart"><code>audiostart</code></dfn> event
    <dd>Fired when the user agent has started to capture audio.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="event" data-export id="eventdef-speechrecognition-soundstart"><code>soundstart</code></dfn> event
    <dd>Fired when some sound, possibly speech, has been detected.
  This must be fired with low latency, e.g. by using a client-side energy detector.
  The <a class="idl-code" data-link-type="event" href="#eventdef-speechrecognition-audiostart" id="ref-for-eventdef-speechrecognition-audiostart">audiostart</a> event must always have been fired before the soundstart event.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="event" data-export id="eventdef-speechrecognition-speechstart"><code>speechstart</code></dfn> event
    <dd>Fired when the speech that will be used for speech recognition has started.
  The <a class="idl-code" data-link-type="event" href="#eventdef-speechrecognition-audiostart" id="ref-for-eventdef-speechrecognition-audiostart①">audiostart</a> event must always have been fired before the speechstart event.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="event" data-export id="eventdef-speechrecognition-speechend"><code>speechend</code></dfn> event
    <dd>Fired when the speech that will be used for speech recognition has ended.
  The <a class="idl-code" data-link-type="event" href="#eventdef-speechrecognition-speechstart" id="ref-for-eventdef-speechrecognition-speechstart①">speechstart</a> event must always have been fired before speechend.
    <dt><dfn class="idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="event" data-export id="eventdef-speechrecognition-soundend"><code>soundend</code><a class="self-link" href="#eventdef-speechrecognition-soundend"></a></dfn> event
    <dd>Fired when some sound is no longer detected.
  This must be fired with low latency, e.g. by using a client-side energy detector.
  The <a class="idl-code" data-link-type="event" href="#eventdef-speechrecognition-soundstart" id="ref-for-eventdef-speechrecognition-soundstart">soundstart</a> event must always have been fired before soundend.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="event" data-export id="eventdef-speechrecognition-audioend"><code>audioend</code></dfn> event
    <dd>Fired when the user agent has finished capturing audio.
  The <a class="idl-code" data-link-type="event" href="#eventdef-speechrecognition-audiostart" id="ref-for-eventdef-speechrecognition-audiostart②">audiostart</a> event must always have been fired before audioend.
    <dt><dfn class="idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="event" data-export id="eventdef-speechrecognition-result"><code>result</code><a class="self-link" href="#eventdef-speechrecognition-result"></a></dfn> event
    <dd>Fired when the speech recognizer returns a result.
  The event must use the <code class="idl"><a data-link-type="idl" href="#speechrecognitionevent" id="ref-for-speechrecognitionevent">SpeechRecognitionEvent</a></code> interface.
  The <a class="idl-code" data-link-type="event" href="#eventdef-speechrecognition-audiostart" id="ref-for-eventdef-speechrecognition-audiostart③">audiostart</a> event must always have been fired before the result event.
    <dt><dfn class="idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="event" data-export id="eventdef-speechrecognition-nomatch"><code>nomatch</code><a class="self-link" href="#eventdef-speechrecognition-nomatch"></a></dfn> event
    <dd>Fired when the speech recognizer returns a final result with no recognition hypothesis that meet or exceed the confidence threshold.
  The event must use the <code class="idl"><a data-link-type="idl" href="#speechrecognitionevent" id="ref-for-speechrecognitionevent①">SpeechRecognitionEvent</a></code> interface.
  The <code class="idl"><a data-link-type="idl" href="#dom-speechrecognitionevent-results" id="ref-for-dom-speechrecognitionevent-results①">results</a></code> attribute in the event may contain speech recognition results that are below the confidence threshold or may be null.
  The <code class="idl"><a data-link-type="idl" href="#eventdef-speechrecognition-audiostart" id="ref-for-eventdef-speechrecognition-audiostart④">audiostart</a></code> event must always have been fired before the nomatch event.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="event" data-export id="eventdef-speechrecognition-error"><code>error</code></dfn> event
    <dd>Fired when a speech recognition error occurs.
  The event must use the <code class="idl"><a data-link-type="idl" href="#speechrecognitionerrorevent" id="ref-for-speechrecognitionerrorevent">SpeechRecognitionErrorEvent</a></code> interface.
    <dt><dfn class="idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="event" data-export id="eventdef-speechrecognition-start"><code>start</code><a class="self-link" href="#eventdef-speechrecognition-start"></a></dfn> event
    <dd>Fired when the recognition service has begun to listen to the audio with the intention of recognizing. 
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognition" data-dfn-type="event" data-export id="eventdef-speechrecognition-end"><code>end</code></dfn> event
    <dd>Fired when the service has disconnected.
  The event must always be generated when the session ends no matter the reason for the end.
   </dl>
   <h4 class="heading settled" data-level="4.1.4" id="speechreco-error"><span class="secno">4.1.4. </span><span class="content">SpeechRecognitionErrorEvent</span><a class="self-link" href="#speechreco-error"></a></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#speechrecognitionerrorevent" id="ref-for-speechrecognitionerrorevent①">SpeechRecognitionErrorEvent</a></code> interface is used for the <a class="idl-code" data-link-type="event" href="#eventdef-speechrecognition-error" id="ref-for-eventdef-speechrecognition-error③">error</a> event.</p>
   <dl>
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognitionErrorEvent" data-dfn-type="attribute" data-export id="dom-speechrecognitionerrorevent-error"><code>error</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="#enumdef-speechrecognitionerrorcode" id="ref-for-enumdef-speechrecognitionerrorcode②">SpeechRecognitionErrorCode</a>, readonly</span>
    <dd>
     The errorCode is an enumeration indicating what has gone wrong.
  The values are: 
     <dl>
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognitionErrorCode" data-dfn-type="enum-value" data-export id="dom-speechrecognitionerrorcode-no-speech"><code>"no-speech"</code></dfn>
      <dd>No speech was detected.
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognitionErrorCode" data-dfn-type="enum-value" data-export id="dom-speechrecognitionerrorcode-aborted"><code>"aborted"</code></dfn>
      <dd>Speech input was aborted somehow, maybe by some user-agent-specific behavior such as UI that lets the user cancel speech input.
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognitionErrorCode" data-dfn-type="enum-value" data-export id="dom-speechrecognitionerrorcode-audio-capture"><code>"audio-capture"</code></dfn>
      <dd>Audio capture failed.
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognitionErrorCode" data-dfn-type="enum-value" data-export id="dom-speechrecognitionerrorcode-network"><code>"network"</code></dfn>
      <dd>Some network communication that was required to complete the recognition failed.
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognitionErrorCode" data-dfn-type="enum-value" data-export id="dom-speechrecognitionerrorcode-not-allowed"><code>"not-allowed"</code></dfn>
      <dd>The user agent is not allowing any speech input to occur for reasons of security, privacy or user preference.
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognitionErrorCode" data-dfn-type="enum-value" data-export id="dom-speechrecognitionerrorcode-service-not-allowed"><code>"service-not-allowed"</code></dfn>
      <dd>The user agent is not allowing the web application requested speech service, but would allow some speech service, to be used either because the user agent doesn’t support the selected one or because of reasons of security, privacy or user preference.
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognitionErrorCode" data-dfn-type="enum-value" data-export id="dom-speechrecognitionerrorcode-bad-grammar"><code>"bad-grammar"</code></dfn>
      <dd>There was an error in the speech recognition grammar or semantic tags, or the grammar format or semantic tag format is unsupported.
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognitionErrorCode" data-dfn-type="enum-value" data-export id="dom-speechrecognitionerrorcode-language-not-supported"><code>"language-not-supported"</code></dfn>
      <dd>The language was not supported.
     </dl>
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognitionErrorEvent" data-dfn-type="attribute" data-export id="dom-speechrecognitionerrorevent-message"><code>message</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①⓪">DOMString</a>, readonly</span>
    <dd>The message content is implementation specific.
  This attribute is primarily intended for debugging and developers should not use it directly in their application user interface.
   </dl>
   <h4 class="heading settled" data-level="4.1.5" id="speechreco-alternative"><span class="secno">4.1.5. </span><span class="content">SpeechRecognitionAlternative</span><a class="self-link" href="#speechreco-alternative"></a></h4>
   <p>The SpeechRecognitionAlternative represents a simple view of the response that gets used in a n-best list. </p>
   <dl>
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognitionAlternative" data-dfn-type="attribute" data-export id="dom-speechrecognitionalternative-transcript"><code>transcript</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①①">DOMString</a>, readonly</span>
    <dd>The transcript string represents the raw words that the user spoke.
  For continuous recognition, leading or trailing whitespace MUST be included where necessary such that concatenation of consecutive SpeechRecognitionResults produces a proper transcript of the session.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognitionAlternative" data-dfn-type="attribute" data-export id="dom-speechrecognitionalternative-confidence"><code>confidence</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float④">float</a>, readonly</span>
    <dd>
     The confidence represents a numeric estimate between 0 and 1 of how confident the recognition system is that the recognition is correct.
  A higher number means the system is more confident. 
     <p class="issue" id="issue-1fc473cc"><a class="self-link" href="#issue-1fc473cc"></a>The group has discussed whether confidence can be specified in a speech-recognition-engine-independent manner and whether confidence threshold and nomatch should be included, because this is not a dialog API.
  See <a href="https://lists.w3.org/Archives/Public/public-speech-api/2012Jun/0143.html">Confidence property</a> thread on public-speech-api@w3.org.</p>
   </dl>
   <h4 class="heading settled" data-level="4.1.6" id="speechreco-result"><span class="secno">4.1.6. </span><span class="content">SpeechRecognitionResult</span><a class="self-link" href="#speechreco-result"></a></h4>
   <p>The SpeechRecognitionResult object represents a single one-shot recognition match, either as one small part of a continuous recognition or as the complete return result of a non-continuous recognition.</p>
   <dl>
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognitionResult" data-dfn-type="attribute" data-export id="dom-speechrecognitionresult-length"><code>length</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long①⓪">unsigned long</a>, readonly</span>
    <dd>The long attribute represents how many n-best alternatives are represented in the item array.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognitionResult" data-dfn-type="method" data-export id="dom-speechrecognitionresult-item"><code>item(<var>index</var>)</code></dfn> getter
    <dd>The item getter returns a SpeechRecognitionAlternative from the index into an array of n-best values.
  If index is greater than or equal to length, this returns null.
  The user agent must ensure that the length attribute is set to the number of elements in the array.
  The user agent must ensure that the n-best list is sorted in non-increasing confidence order (each element must be less than or equal to the confidence of the preceding elements).
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognitionResult" data-dfn-type="attribute" data-export id="dom-speechrecognitionresult-isfinal"><code>isFinal</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean⑤">boolean</a>, readonly</span>
    <dd>The final boolean must be set to true if this is the final time the speech service will return this particular index value.
  If the value is false, then this represents an interim result that could still be changed.
   </dl>
   <h4 class="heading settled" data-level="4.1.7" id="speechreco-resultlist"><span class="secno">4.1.7. </span><span class="content">SpeechRecognitionResultList</span><a class="self-link" href="#speechreco-resultlist"></a></h4>
   <p>The SpeechRecognitionResultList object holds a sequence of recognition results representing the complete return result of a continuous recognition.
For a non-continuous recognition it will hold only a single value.</p>
   <dl>
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognitionResultList" data-dfn-type="attribute" data-export id="dom-speechrecognitionresultlist-length"><code>length</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long①①">unsigned long</a>, readonly</span>
    <dd>The length attribute indicates how many results are represented in the item array.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognitionResultList" data-dfn-type="method" data-export id="dom-speechrecognitionresultlist-item"><code>item(<var>index</var>)</code></dfn> getter
    <dd>The item getter returns a SpeechRecognitionResult from the index into an array of result values.
  If index is greater than or equal to length, this returns null.
  The user agent must ensure that the length attribute is set to the number of elements in the array.
   </dl>
   <h4 class="heading settled" data-level="4.1.8" id="speechreco-event"><span class="secno">4.1.8. </span><span class="content">SpeechRecognitionEvent</span><a class="self-link" href="#speechreco-event"></a></h4>
   <p>The SpeechRecognitionEvent is the event that is raised each time there are any changes to interim or final results.</p>
   <dl>
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognitionEvent" data-dfn-type="attribute" data-export id="dom-speechrecognitionevent-resultindex"><code>resultIndex</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long①②">unsigned long</a>, readonly</span>
    <dd>The resultIndex must be set to the lowest index in the "results" array that has changed.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechRecognitionEvent" data-dfn-type="attribute" data-export id="dom-speechrecognitionevent-results"><code>results</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="#speechrecognitionresultlist" id="ref-for-speechrecognitionresultlist②">SpeechRecognitionResultList</a>, readonly</span>
    <dd>The array of all current recognition results for this session.
  Specifically all final results that have been returned, followed by the current best hypothesis for all interim results.
  It must consist of zero or more final results followed by zero or more interim results.
  On subsequent SpeechRecognitionResultEvent events, interim results may be overwritten by a newer interim result or by a final result or may be removed (when at the end of the "results" array and the array length decreases).
  Final results must not be overwritten or removed.
  All entries for indexes less than resultIndex must be identical to the array that was present when the last SpeechRecognitionResultEvent was raised.
  All array entries (if any) for indexes equal or greater than resultIndex that were present in the array when the last SpeechRecognitionResultEvent was raised are removed and overwritten with new results.
  The length of the "results" array may increase or decrease, but must not be less than resultIndex.
  Note that when resultIndex equals results.length, no new results are returned, this may occur when the array length decreases to remove one or more interim results.
   </dl>
   <h4 class="heading settled" data-level="4.1.9" id="speechreco-speechgrammar"><span class="secno">4.1.9. </span><span class="content">SpeechGrammar</span><a class="self-link" href="#speechreco-speechgrammar"></a></h4>
   <p>The SpeechGrammar object represents a container for a grammar.</p>
   <p class="issue" id="issue-29f5066f"><a class="self-link" href="#issue-29f5066f"></a>The group has discussed options for which grammar formats should be supported, how builtin grammar types are specified, and default grammars when not specified.
See <a href="https://lists.w3.org/Archives/Public/public-speech-api/2012Jun/0179.html">Default value of SpeechRecognition.grammars</a> thread on public-speech-api@w3.org.</p>
   <p>This structure has the following attributes:</p>
   <dl>
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechGrammar" data-dfn-type="attribute" data-export id="dom-speechgrammar-src"><code>src</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①②">DOMString</a></span>
    <dd>The required src attribute is the URI for the grammar.
  Note some services may support builtin grammars that can be specified using a builtin URI scheme.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechGrammar" data-dfn-type="attribute" data-export id="dom-speechgrammar-weight"><code>weight</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float⑤">float</a></span>
    <dd>The optional weight attribute controls the weight that the speech recognition service should use with this grammar.
  By default, a grammar has a weight of 1.
  Larger weight values positively weight the grammar while smaller weight values make the grammar weighted less strongly.
   </dl>
   <h4 class="heading settled" data-level="4.1.10" id="speechreco-speechgrammarlist"><span class="secno">4.1.10. </span><span class="content">SpeechGrammarList</span><a class="self-link" href="#speechreco-speechgrammarlist"></a></h4>
   <p>The SpeechGrammarList object represents a collection of SpeechGrammar objects.
This structure has the following attributes:</p>
   <dl>
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechGrammarList" data-dfn-type="attribute" data-export id="dom-speechgrammarlist-length"><code>length</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long①③">unsigned long</a>, readonly</span>
    <dd>The length attribute represents how many grammars are currently in the array.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechGrammarList" data-dfn-type="method" data-export id="dom-speechgrammarlist-item"><code>item(<var>index</var>)</code></dfn> getter
    <dd>The item getter returns a SpeechGrammar from the index into an array of grammars.
  The user agent must ensure that the length attribute is set to the number of elements in the array.
  The user agent must ensure that the index order from smallest to largest matches the order in which grammars were added to the array.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechGrammarList" data-dfn-type="method" data-export data-lt="addFromURI(src, weight)|addFromURI(src)" id="dom-speechgrammarlist-addfromuri"><code>addFromURI(<var>src</var>, <var>weight</var>)</code></dfn> method
    <dd>This method appends a grammar to the grammars array parameter based on URI.
  The URI for the grammar is specified by the <var>src</var> parameter, which represents the URI for the grammar.
  Note, some services may support builtin grammars that can be specified by URI.
  The <var>weight</var> parameter represents this grammar’s weight relative to the other grammar. 
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechGrammarList" data-dfn-type="method" data-export data-lt="addFromString(string, weight)|addFromString(string)" id="dom-speechgrammarlist-addfromstring"><code>addFromString(<var>string</var>, <var>weight</var>)</code></dfn> method
    <dd>This method appends a grammar to the grammars array parameter based on text.
  The content of the grammar is specified by the <var>string</var> parameter.
  This content should be encoded into a data: URI when the SpeechGrammar object is created.
  The <var>weight</var> parameter represents this grammar’s weight relative to the other grammar. 
   </dl>
   <h3 class="heading settled" data-level="4.2" id="tts-section"><span class="secno">4.2. </span><span class="content">The SpeechSynthesis Interface</span><a class="self-link" href="#tts-section"></a></h3>
   <p>The SpeechSynthesis interface is the scripted web API for controlling a text-to-speech output.</p>
<pre class="idl highlight def">[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed⑧"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export id="speechsynthesis"><code><c- g>SpeechSynthesis</c-></code></dfn> : <a class="n" data-link-type="idl-name" href="https://dom.spec.whatwg.org/#eventtarget" id="ref-for-eventtarget①"><c- n>EventTarget</c-></a> {
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean⑥"><c- b>boolean</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="boolean" href="#dom-speechsynthesis-pending" id="ref-for-dom-speechsynthesis-pending"><c- g>pending</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean⑦"><c- b>boolean</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="boolean" href="#dom-speechsynthesis-speaking" id="ref-for-dom-speechsynthesis-speaking"><c- g>speaking</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean⑧"><c- b>boolean</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="boolean" href="#dom-speechsynthesis-paused" id="ref-for-dom-speechsynthesis-paused"><c- g>paused</c-></a>;

    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①①"><c- n>EventHandler</c-></a> <dfn class="idl-code" data-dfn-for="SpeechSynthesis" data-dfn-type="attribute" data-export data-type="EventHandler" id="dom-speechsynthesis-onvoiceschanged"><code><c- g>onvoiceschanged</c-></code><a class="self-link" href="#dom-speechsynthesis-onvoiceschanged"></a></dfn>;

    <c- b>void</c-> <a class="idl-code" data-link-type="method" href="#dom-speechsynthesis-speak" id="ref-for-dom-speechsynthesis-speak"><c- g>speak</c-></a>(<a class="n" data-link-type="idl-name" href="#speechsynthesisutterance" id="ref-for-speechsynthesisutterance"><c- n>SpeechSynthesisUtterance</c-></a> <dfn class="idl-code" data-dfn-for="SpeechSynthesis/speak(utterance)" data-dfn-type="argument" data-export id="dom-speechsynthesis-speak-utterance-utterance"><code><c- g>utterance</c-></code><a class="self-link" href="#dom-speechsynthesis-speak-utterance-utterance"></a></dfn>);
    <c- b>void</c-> <a class="idl-code" data-link-type="method" href="#dom-speechsynthesis-cancel" id="ref-for-dom-speechsynthesis-cancel"><c- g>cancel</c-></a>();
    <c- b>void</c-> <a class="idl-code" data-link-type="method" href="#dom-speechsynthesis-pause" id="ref-for-dom-speechsynthesis-pause"><c- g>pause</c-></a>();
    <c- b>void</c-> <a class="idl-code" data-link-type="method" href="#dom-speechsynthesis-resume" id="ref-for-dom-speechsynthesis-resume"><c- g>resume</c-></a>();
    <c- b>sequence</c->&lt;<a class="n" data-link-type="idl-name" href="#speechsynthesisvoice" id="ref-for-speechsynthesisvoice"><c- n>SpeechSynthesisVoice</c-></a>> <a class="idl-code" data-link-type="method" href="#dom-speechsynthesis-getvoices" id="ref-for-dom-speechsynthesis-getvoices"><c- g>getVoices</c-></a>();
};

<c- b>partial</c-> <c- b>interface</c-> <a class="idl-code" data-link-type="interface" href="https://html.spec.whatwg.org/multipage/window-object.html#window" id="ref-for-window"><c- g>Window</c-></a> {
    [<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#SameObject" id="ref-for-SameObject"><c- g>SameObject</c-></a>] <c- b>readonly</c-> <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="#speechsynthesis" id="ref-for-speechsynthesis"><c- n>SpeechSynthesis</c-></a> <dfn class="idl-code" data-dfn-for="Window" data-dfn-type="attribute" data-export data-readonly data-type="SpeechSynthesis" id="dom-window-speechsynthesis"><code><c- g>speechSynthesis</c-></code><a class="self-link" href="#dom-window-speechsynthesis"></a></dfn>;
};

[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed⑨"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export id="speechsynthesisutterance"><code><c- g>SpeechSynthesisUtterance</c-></code></dfn> : <a class="n" data-link-type="idl-name" href="https://dom.spec.whatwg.org/#eventtarget" id="ref-for-eventtarget②"><c- n>EventTarget</c-></a> {
    <dfn class="idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="constructor" data-export data-lt="SpeechSynthesisUtterance(text)|constructor(text)|SpeechSynthesisUtterance()|constructor()" id="dom-speechsynthesisutterance-speechsynthesisutterance"><code><c- g>constructor</c-></code><a class="self-link" href="#dom-speechsynthesisutterance-speechsynthesisutterance"></a></dfn>(<c- b>optional</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①③"><c- b>DOMString</c-></a> <dfn class="idl-code" data-dfn-for="SpeechSynthesisUtterance/SpeechSynthesisUtterance(text), SpeechSynthesisUtterance/constructor(text), SpeechSynthesisUtterance/SpeechSynthesisUtterance(), SpeechSynthesisUtterance/constructor()" data-dfn-type="argument" data-export id="dom-speechsynthesisutterance-speechsynthesisutterance-text-text"><code><c- g>text</c-></code><a class="self-link" href="#dom-speechsynthesisutterance-speechsynthesisutterance-text-text"></a></dfn>);

    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①④"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-type="DOMString" href="#dom-speechsynthesisutterance-text" id="ref-for-dom-speechsynthesisutterance-text"><c- g>text</c-></a>;
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①⑤"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-type="DOMString" href="#dom-speechsynthesisutterance-lang" id="ref-for-dom-speechsynthesisutterance-lang"><c- g>lang</c-></a>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="#speechsynthesisvoice" id="ref-for-speechsynthesisvoice①"><c- n>SpeechSynthesisVoice</c-></a>? <a class="idl-code" data-link-type="attribute" data-type="SpeechSynthesisVoice?" href="#dom-speechsynthesisutterance-voice" id="ref-for-dom-speechsynthesisutterance-voice"><c- g>voice</c-></a>;
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float⑥"><c- b>float</c-></a> <a class="idl-code" data-link-type="attribute" data-type="float" href="#dom-speechsynthesisutterance-volume" id="ref-for-dom-speechsynthesisutterance-volume"><c- g>volume</c-></a>;
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float⑦"><c- b>float</c-></a> <a class="idl-code" data-link-type="attribute" data-type="float" href="#dom-speechsynthesisutterance-rate" id="ref-for-dom-speechsynthesisutterance-rate"><c- g>rate</c-></a>;
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float⑧"><c- b>float</c-></a> <a class="idl-code" data-link-type="attribute" data-type="float" href="#dom-speechsynthesisutterance-pitch" id="ref-for-dom-speechsynthesisutterance-pitch"><c- g>pitch</c-></a>;

    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①②"><c- n>EventHandler</c-></a> <dfn class="idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="attribute" data-export data-type="EventHandler" id="dom-speechsynthesisutterance-onstart"><code><c- g>onstart</c-></code><a class="self-link" href="#dom-speechsynthesisutterance-onstart"></a></dfn>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①③"><c- n>EventHandler</c-></a> <dfn class="idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="attribute" data-export data-type="EventHandler" id="dom-speechsynthesisutterance-onend"><code><c- g>onend</c-></code><a class="self-link" href="#dom-speechsynthesisutterance-onend"></a></dfn>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①④"><c- n>EventHandler</c-></a> <dfn class="idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="attribute" data-export data-type="EventHandler" id="dom-speechsynthesisutterance-onerror"><code><c- g>onerror</c-></code><a class="self-link" href="#dom-speechsynthesisutterance-onerror"></a></dfn>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①⑤"><c- n>EventHandler</c-></a> <dfn class="idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="attribute" data-export data-type="EventHandler" id="dom-speechsynthesisutterance-onpause"><code><c- g>onpause</c-></code><a class="self-link" href="#dom-speechsynthesisutterance-onpause"></a></dfn>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①⑥"><c- n>EventHandler</c-></a> <dfn class="idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="attribute" data-export data-type="EventHandler" id="dom-speechsynthesisutterance-onresume"><code><c- g>onresume</c-></code><a class="self-link" href="#dom-speechsynthesisutterance-onresume"></a></dfn>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①⑦"><c- n>EventHandler</c-></a> <dfn class="idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="attribute" data-export data-type="EventHandler" id="dom-speechsynthesisutterance-onmark"><code><c- g>onmark</c-></code><a class="self-link" href="#dom-speechsynthesisutterance-onmark"></a></dfn>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①⑧"><c- n>EventHandler</c-></a> <dfn class="idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="attribute" data-export data-type="EventHandler" id="dom-speechsynthesisutterance-onboundary"><code><c- g>onboundary</c-></code><a class="self-link" href="#dom-speechsynthesisutterance-onboundary"></a></dfn>;
};

[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed①⓪"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export id="speechsynthesisevent"><code><c- g>SpeechSynthesisEvent</c-></code></dfn> : <a class="n" data-link-type="idl-name" href="https://dom.spec.whatwg.org/#event" id="ref-for-event②"><c- n>Event</c-></a> {
    <dfn class="idl-code" data-dfn-for="SpeechSynthesisEvent" data-dfn-type="constructor" data-export data-lt="SpeechSynthesisEvent(type, eventInitDict)|constructor(type, eventInitDict)" id="dom-speechsynthesisevent-speechsynthesisevent"><code><c- g>constructor</c-></code><a class="self-link" href="#dom-speechsynthesisevent-speechsynthesisevent"></a></dfn>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①⑥"><c- b>DOMString</c-></a> <dfn class="idl-code" data-dfn-for="SpeechSynthesisEvent/SpeechSynthesisEvent(type, eventInitDict), SpeechSynthesisEvent/constructor(type, eventInitDict)" data-dfn-type="argument" data-export id="dom-speechsynthesisevent-speechsynthesisevent-type-eventinitdict-type"><code><c- g>type</c-></code><a class="self-link" href="#dom-speechsynthesisevent-speechsynthesisevent-type-eventinitdict-type"></a></dfn>, <a class="n" data-link-type="idl-name" href="#dictdef-speechsynthesiseventinit" id="ref-for-dictdef-speechsynthesiseventinit"><c- n>SpeechSynthesisEventInit</c-></a> <dfn class="idl-code" data-dfn-for="SpeechSynthesisEvent/SpeechSynthesisEvent(type, eventInitDict), SpeechSynthesisEvent/constructor(type, eventInitDict)" data-dfn-type="argument" data-export id="dom-speechsynthesisevent-speechsynthesisevent-type-eventinitdict-eventinitdict"><code><c- g>eventInitDict</c-></code><a class="self-link" href="#dom-speechsynthesisevent-speechsynthesisevent-type-eventinitdict-eventinitdict"></a></dfn>);
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="#speechsynthesisutterance" id="ref-for-speechsynthesisutterance①"><c- n>SpeechSynthesisUtterance</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="SpeechSynthesisUtterance" href="#dom-speechsynthesisevent-utterance" id="ref-for-dom-speechsynthesisevent-utterance"><c- g>utterance</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long①④"><c- b>unsigned</c-> <c- b>long</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="unsigned long" href="#dom-speechsynthesisevent-charindex" id="ref-for-dom-speechsynthesisevent-charindex"><c- g>charIndex</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long①⑤"><c- b>unsigned</c-> <c- b>long</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="unsigned long" href="#dom-speechsynthesisevent-charlength" id="ref-for-dom-speechsynthesisevent-charlength"><c- g>charLength</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float⑨"><c- b>float</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="float" href="#dom-speechsynthesisevent-elapsedtime" id="ref-for-dom-speechsynthesisevent-elapsedtime"><c- g>elapsedTime</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①⑦"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="DOMString" href="#dom-speechsynthesisevent-name" id="ref-for-dom-speechsynthesisevent-name"><c- g>name</c-></a>;
};

<c- b>dictionary</c-> <dfn class="dfn-paneled idl-code" data-dfn-type="dictionary" data-export id="dictdef-speechsynthesiseventinit"><code><c- g>SpeechSynthesisEventInit</c-></code></dfn> : <a class="n" data-link-type="idl-name" href="https://dom.spec.whatwg.org/#dictdef-eventinit" id="ref-for-dictdef-eventinit②"><c- n>EventInit</c-></a> {
    <c- b>required</c-> <a class="n" data-link-type="idl-name" href="#speechsynthesisutterance" id="ref-for-speechsynthesisutterance②"><c- n>SpeechSynthesisUtterance</c-></a> <dfn class="idl-code" data-dfn-for="SpeechSynthesisEventInit" data-dfn-type="dict-member" data-export data-type="SpeechSynthesisUtterance " id="dom-speechsynthesiseventinit-utterance"><code><c- g>utterance</c-></code><a class="self-link" href="#dom-speechsynthesiseventinit-utterance"></a></dfn>;
    <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long①⑥"><c- b>unsigned</c-> <c- b>long</c-></a> <dfn class="idl-code" data-default="0" data-dfn-for="SpeechSynthesisEventInit" data-dfn-type="dict-member" data-export data-type="unsigned long " id="dom-speechsynthesiseventinit-charindex"><code><c- g>charIndex</c-></code><a class="self-link" href="#dom-speechsynthesiseventinit-charindex"></a></dfn> = 0;
    <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long①⑦"><c- b>unsigned</c-> <c- b>long</c-></a> <dfn class="idl-code" data-default="0" data-dfn-for="SpeechSynthesisEventInit" data-dfn-type="dict-member" data-export data-type="unsigned long " id="dom-speechsynthesiseventinit-charlength"><code><c- g>charLength</c-></code><a class="self-link" href="#dom-speechsynthesiseventinit-charlength"></a></dfn> = 0;
    <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float①⓪"><c- b>float</c-></a> <dfn class="idl-code" data-default="0" data-dfn-for="SpeechSynthesisEventInit" data-dfn-type="dict-member" data-export data-type="float " id="dom-speechsynthesiseventinit-elapsedtime"><code><c- g>elapsedTime</c-></code><a class="self-link" href="#dom-speechsynthesiseventinit-elapsedtime"></a></dfn> = 0;
    <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①⑧"><c- b>DOMString</c-></a> <dfn class="idl-code" data-default="&quot;&quot;" data-dfn-for="SpeechSynthesisEventInit" data-dfn-type="dict-member" data-export data-type="DOMString " id="dom-speechsynthesiseventinit-name"><code><c- g>name</c-></code><a class="self-link" href="#dom-speechsynthesiseventinit-name"></a></dfn> = "";
};

<c- b>enum</c-> <dfn class="dfn-paneled idl-code" data-dfn-type="enum" data-export id="enumdef-speechsynthesiserrorcode"><code><c- g>SpeechSynthesisErrorCode</c-></code></dfn> {
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-canceled" id="ref-for-dom-speechsynthesiserrorcode-canceled"><c- s>"canceled"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-interrupted" id="ref-for-dom-speechsynthesiserrorcode-interrupted"><c- s>"interrupted"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-audio-busy" id="ref-for-dom-speechsynthesiserrorcode-audio-busy"><c- s>"audio-busy"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-audio-hardware" id="ref-for-dom-speechsynthesiserrorcode-audio-hardware"><c- s>"audio-hardware"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-network" id="ref-for-dom-speechsynthesiserrorcode-network"><c- s>"network"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-synthesis-unavailable" id="ref-for-dom-speechsynthesiserrorcode-synthesis-unavailable"><c- s>"synthesis-unavailable"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-synthesis-failed" id="ref-for-dom-speechsynthesiserrorcode-synthesis-failed"><c- s>"synthesis-failed"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-language-unavailable" id="ref-for-dom-speechsynthesiserrorcode-language-unavailable"><c- s>"language-unavailable"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-voice-unavailable" id="ref-for-dom-speechsynthesiserrorcode-voice-unavailable"><c- s>"voice-unavailable"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-text-too-long" id="ref-for-dom-speechsynthesiserrorcode-text-too-long"><c- s>"text-too-long"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-invalid-argument" id="ref-for-dom-speechsynthesiserrorcode-invalid-argument"><c- s>"invalid-argument"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-not-allowed" id="ref-for-dom-speechsynthesiserrorcode-not-allowed"><c- s>"not-allowed"</c-></a>,
};

[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed①①"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export id="speechsynthesiserrorevent"><code><c- g>SpeechSynthesisErrorEvent</c-></code></dfn> : <a class="n" data-link-type="idl-name" href="#speechsynthesisevent" id="ref-for-speechsynthesisevent"><c- n>SpeechSynthesisEvent</c-></a> {
    <dfn class="idl-code" data-dfn-for="SpeechSynthesisErrorEvent" data-dfn-type="constructor" data-export data-lt="SpeechSynthesisErrorEvent(type, eventInitDict)|constructor(type, eventInitDict)" id="dom-speechsynthesiserrorevent-speechsynthesiserrorevent"><code><c- g>constructor</c-></code><a class="self-link" href="#dom-speechsynthesiserrorevent-speechsynthesiserrorevent"></a></dfn>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①⑨"><c- b>DOMString</c-></a> <dfn class="idl-code" data-dfn-for="SpeechSynthesisErrorEvent/SpeechSynthesisErrorEvent(type, eventInitDict), SpeechSynthesisErrorEvent/constructor(type, eventInitDict)" data-dfn-type="argument" data-export id="dom-speechsynthesiserrorevent-speechsynthesiserrorevent-type-eventinitdict-type"><code><c- g>type</c-></code><a class="self-link" href="#dom-speechsynthesiserrorevent-speechsynthesiserrorevent-type-eventinitdict-type"></a></dfn>, <a class="n" data-link-type="idl-name" href="#dictdef-speechsynthesiserroreventinit" id="ref-for-dictdef-speechsynthesiserroreventinit"><c- n>SpeechSynthesisErrorEventInit</c-></a> <dfn class="idl-code" data-dfn-for="SpeechSynthesisErrorEvent/SpeechSynthesisErrorEvent(type, eventInitDict), SpeechSynthesisErrorEvent/constructor(type, eventInitDict)" data-dfn-type="argument" data-export id="dom-speechsynthesiserrorevent-speechsynthesiserrorevent-type-eventinitdict-eventinitdict"><code><c- g>eventInitDict</c-></code><a class="self-link" href="#dom-speechsynthesiserrorevent-speechsynthesiserrorevent-type-eventinitdict-eventinitdict"></a></dfn>);
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="#enumdef-speechsynthesiserrorcode" id="ref-for-enumdef-speechsynthesiserrorcode"><c- n>SpeechSynthesisErrorCode</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="SpeechSynthesisErrorCode" href="#dom-speechsynthesiserrorevent-error" id="ref-for-dom-speechsynthesiserrorevent-error"><c- g>error</c-></a>;
};

<c- b>dictionary</c-> <dfn class="dfn-paneled idl-code" data-dfn-type="dictionary" data-export id="dictdef-speechsynthesiserroreventinit"><code><c- g>SpeechSynthesisErrorEventInit</c-></code></dfn> : <a class="n" data-link-type="idl-name" href="#dictdef-speechsynthesiseventinit" id="ref-for-dictdef-speechsynthesiseventinit①"><c- n>SpeechSynthesisEventInit</c-></a> {
    <c- b>required</c-> <a class="n" data-link-type="idl-name" href="#enumdef-speechsynthesiserrorcode" id="ref-for-enumdef-speechsynthesiserrorcode①"><c- n>SpeechSynthesisErrorCode</c-></a> <dfn class="idl-code" data-dfn-for="SpeechSynthesisErrorEventInit" data-dfn-type="dict-member" data-export data-type="SpeechSynthesisErrorCode " id="dom-speechsynthesiserroreventinit-error"><code><c- g>error</c-></code><a class="self-link" href="#dom-speechsynthesiserroreventinit-error"></a></dfn>;
};

[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed①②"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export id="speechsynthesisvoice"><code><c- g>SpeechSynthesisVoice</c-></code></dfn> {
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString②⓪"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="DOMString" href="#dom-speechsynthesisvoice-voiceuri" id="ref-for-dom-speechsynthesisvoice-voiceuri"><c- g>voiceURI</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString②①"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="DOMString" href="#dom-speechsynthesisvoice-name" id="ref-for-dom-speechsynthesisvoice-name"><c- g>name</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString②②"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="DOMString" href="#dom-speechsynthesisvoice-lang" id="ref-for-dom-speechsynthesisvoice-lang"><c- g>lang</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean⑨"><c- b>boolean</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="boolean" href="#dom-speechsynthesisvoice-localservice" id="ref-for-dom-speechsynthesisvoice-localservice"><c- g>localService</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean①⓪"><c- b>boolean</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="boolean" href="#dom-speechsynthesisvoice-default" id="ref-for-dom-speechsynthesisvoice-default"><c- g>default</c-></a>;
};
</pre>
   <h4 class="heading settled" data-level="4.2.1" id="tts-attributes"><span class="secno">4.2.1. </span><span class="content">SpeechSynthesis Attributes</span><a class="self-link" href="#tts-attributes"></a></h4>
   <dl>
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesis" data-dfn-type="attribute" data-export id="dom-speechsynthesis-pending"><code>pending</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean①①">boolean</a>, readonly</span>
    <dd>This attribute is true if the queue for the global SpeechSynthesis instance contains any utterances which have not started speaking.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesis" data-dfn-type="attribute" data-export id="dom-speechsynthesis-speaking"><code>speaking</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean①②">boolean</a>, readonly</span>
    <dd>This attribute is true if an utterance is being spoken.
  Specifically if an utterance has begun being spoken and has not completed being spoken.
  This is independent of whether the global SpeechSynthesis instance is in the paused state.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesis" data-dfn-type="attribute" data-export id="dom-speechsynthesis-paused"><code>paused</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean①③">boolean</a>, readonly</span>
    <dd>This attribute is true when the global SpeechSynthesis instance is in the paused state.
  This state is independent of whether anything is in the queue.
  The default state of a the global SpeechSynthesis instance for a new window is the non-paused state.
   </dl>
   <h4 class="heading settled" data-level="4.2.2" id="tts-methods"><span class="secno">4.2.2. </span><span class="content">SpeechSynthesis Methods</span><a class="self-link" href="#tts-methods"></a></h4>
   <dl>
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesis" data-dfn-type="method" data-export id="dom-speechsynthesis-speak"><code>speak(<var>utterance</var>)</code></dfn> method
    <dd>This method appends the SpeechSynthesisUtterance object <var>utterance</var> to the end of the queue for the global SpeechSynthesis instance.
  It does not change the paused state of the SpeechSynthesis instance.
  If the SpeechSynthesis instance is paused, it remains paused.
  If it is not paused and no other utterances are in the queue, then this utterance is spoken immediately,
  else this utterance is queued to begin speaking after the other utterances in the queue have been spoken.
  If changes are made to the SpeechSynthesisUtterance object after calling this method and prior to the corresponding <a class="idl-code" data-link-type="event" href="#eventdef-speechsynthesisutterance-end" id="ref-for-eventdef-speechsynthesisutterance-end">end</a> or <a class="idl-code" data-link-type="event" href="#eventdef-speechsynthesisutterance-error" id="ref-for-eventdef-speechsynthesisutterance-error">error</a> event,
  it is not defined whether those changes will affect what is spoken, and those changes may cause an error to be returned.
  The SpeechSynthesis object takes exclusive ownership of the SpeechSynthesisUtterance object.
  Passing it as a speak() argument to another SpeechSynthesis object should throw an exception.
  (For example, two frames may have the same origin and each will contain a SpeechSynthesis object.)
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesis" data-dfn-type="method" data-export id="dom-speechsynthesis-cancel"><code>cancel()</code></dfn> method
    <dd>This method removes all utterances from the queue.
  If an utterance is being spoken, speaking ceases immediately.
  This method does not change the paused state of the global SpeechSynthesis instance.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesis" data-dfn-type="method" data-export id="dom-speechsynthesis-pause"><code>pause()</code></dfn> method
    <dd>This method puts the global SpeechSynthesis instance into the paused state.
  If an utterance was being spoken, it pauses mid-utterance.
  (If called when the SpeechSynthesis instance was already in the paused state, it does nothing.)
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesis" data-dfn-type="method" data-export id="dom-speechsynthesis-resume"><code>resume()</code></dfn> method
    <dd>This method puts the global SpeechSynthesis instance into the non-paused state.
  If an utterance was speaking, it continues speaking the utterance at the point at which it was paused, else it begins speaking the next utterance in the queue (if any).
  (If called when the SpeechSynthesis instance was already in the non-paused state, it does nothing.)
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesis" data-dfn-type="method" data-export id="dom-speechsynthesis-getvoices"><code>getVoices()</code></dfn> method
    <dd>This method returns the available voices.
  It is user agent dependent which voices are available.
  If there are no voices available, or if the the list of available voices is not yet known (for example: server-side synthesis where the list is determined asynchronously),
  then this method must return a SpeechSynthesisVoiceList of length zero.
   </dl>
   <h4 class="heading settled" data-level="4.2.3" id="tts-events"><span class="secno">4.2.3. </span><span class="content">SpeechSynthesis Events</span><a class="self-link" href="#tts-events"></a></h4>
   <dl>
    <dt><dfn class="idl-code" data-dfn-for="SpeechSynthesis" data-dfn-type="event" data-export id="eventdef-speechsynthesis-voiceschanged"><code>voiceschanged</code><a class="self-link" href="#eventdef-speechsynthesis-voiceschanged"></a></dfn> event
    <dd>Fired when the contents of the SpeechSynthesisVoiceList, that the getVoices method will return, have changed.
  Examples include: server-side synthesis where the list is determined asynchronously, or when client-side voices are installed/uninstalled.
   </dl>
   <h4 class="heading settled" data-level="4.2.4" id="utterance-attributes"><span class="secno">4.2.4. </span><span class="content">SpeechSynthesisUtterance Attributes</span><a class="self-link" href="#utterance-attributes"></a></h4>
   <dl>
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="attribute" data-export id="dom-speechsynthesisutterance-text"><code>text</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString②③">DOMString</a></span>
    <dd>This attribute specifies the text to be synthesized and spoken for this utterance.
  This may be either plain text or a complete, well-formed SSML document. <a data-link-type="biblio" href="#biblio-ssml">[SSML]</a> For speech synthesis engines that do not support SSML, or only support certain tags, the user agent or speech engine must strip away the tags they do not support and speak the text.
  There may be a maximum length of the text, it may be limited to 32,767 characters.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="attribute" data-export id="dom-speechsynthesisutterance-lang"><code>lang</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString②④">DOMString</a></span>
    <dd>This attribute specifies the language of the speech synthesis for the utterance, using a valid BCP 47 language tag. <a data-link-type="biblio" href="#biblio-bcp47">[BCP47]</a> If unset it remains unset for getting in script, but will default to use the <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/dom.html#language" id="ref-for-language①">language</a> of the html document root element and associated hierarchy.
  This default value is computed and used when the input request opens a connection to the recognition service.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="attribute" data-export id="dom-speechsynthesisutterance-voice"><code>voice</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="#speechsynthesisvoice" id="ref-for-speechsynthesisvoice②">SpeechSynthesisVoice</a>, nullable</span>
    <dd>This attribute specifies the speech synthesis voice that the web application wishes to use.
  When a <code class="idl"><a data-link-type="idl" href="#speechsynthesisutterance" id="ref-for-speechsynthesisutterance③">SpeechSynthesisUtterance</a></code> object is created this attribute must be initialized to null.
  If, at the time of the <code class="idl"><a data-link-type="idl" href="#dom-speechsynthesis-speak" id="ref-for-dom-speechsynthesis-speak①">speak()</a></code> method call, this attribute has been set to one of the <code class="idl"><a data-link-type="idl" href="#speechsynthesisvoice" id="ref-for-speechsynthesisvoice③">SpeechSynthesisVoice</a></code> objects returned by <code class="idl"><a data-link-type="idl" href="#dom-speechsynthesis-getvoices" id="ref-for-dom-speechsynthesis-getvoices①">getVoices()</a></code>, then the user agent must use that voice.
  If this attribute is unset or null at the time of the <code class="idl"><a data-link-type="idl" href="#dom-speechsynthesis-speak" id="ref-for-dom-speechsynthesis-speak②">speak()</a></code> method call, then the user agent must use a user agent default voice.
  The user agent default voice should support the current language (see <code class="idl"><a data-link-type="idl" href="#dom-speechsynthesisutterance-lang" id="ref-for-dom-speechsynthesisutterance-lang①">lang</a></code>) and can be a local or remote speech service and can incorporate end user choices via interfaces provided by the user agent such as browser configuration parameters. 
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="attribute" data-export id="dom-speechsynthesisutterance-volume"><code>volume</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float①①">float</a></span>
    <dd>This attribute specifies the speaking volume for the utterance.
  It ranges between 0 and 1 inclusive, with 0 being the lowest volume and 1 the highest volume, with a default of 1.
  If SSML is used, this value will be overridden by prosody tags in the markup.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="attribute" data-export id="dom-speechsynthesisutterance-rate"><code>rate</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float①②">float</a></span>
    <dd>This attribute specifies the speaking rate for the utterance.
  It is relative to the default rate for this voice.
  1 is the default rate supported by the speech synthesis engine or specific voice (which should correspond to a normal speaking rate).
  2 is twice as fast, and 0.5 is half as fast.
  Values below 0.1 or above 10 are strictly disallowed, but speech synthesis engines or specific voices may constrain the minimum and maximum rates further, for example, a particular voice may not actually speak faster than 3 times normal even if you specify a value larger than 3.
  If SSML is used, this value will be overridden by prosody tags in the markup.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="attribute" data-export id="dom-speechsynthesisutterance-pitch"><code>pitch</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float①③">float</a></span>
    <dd>This attribute specifies the speaking pitch for the utterance.
  It ranges between 0 and 2 inclusive, with 0 being the lowest pitch and 2 the highest pitch.
  1 corresponds to the default pitch of the speech synthesis engine or specific voice.
  Speech synthesis engines or voices may constrain the minimum and maximum rates further.
  If SSML is used, this value will be overridden by prosody tags in the markup.
   </dl>
   <h4 class="heading settled" data-level="4.2.5" id="utterance-events"><span class="secno">4.2.5. </span><span class="content">SpeechSynthesisUtterance Events</span><a class="self-link" href="#utterance-events"></a></h4>
   <p>Each of these events must use the <code class="idl"><a data-link-type="idl" href="#speechsynthesisevent" id="ref-for-speechsynthesisevent①">SpeechSynthesisEvent</a></code> interface,
except the error event which must use the <code class="idl"><a data-link-type="idl" href="#speechsynthesiserrorevent" id="ref-for-speechsynthesiserrorevent">SpeechSynthesisErrorEvent</a></code> interface.
These events bubble up to SpeechSynthesis.</p>
   <dl>
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="event" data-export id="eventdef-speechsynthesisutterance-start"><code>start</code></dfn> event
    <dd>Fired when this utterance has begun to be spoken.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="event" data-export id="eventdef-speechsynthesisutterance-end"><code>end</code></dfn> event
    <dd>Fired when this utterance has completed being spoken.
  If this event fires, the <a class="idl-code" data-link-type="event" href="#eventdef-speechsynthesisutterance-error" id="ref-for-eventdef-speechsynthesisutterance-error①">error</a> event must not be fired for this utterance.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="event" data-export id="eventdef-speechsynthesisutterance-error"><code>error</code></dfn> event
    <dd>Fired if there was an error that prevented successful speaking of this utterance.
  If this event fires, the <a class="idl-code" data-link-type="event" href="#eventdef-speechsynthesisutterance-end" id="ref-for-eventdef-speechsynthesisutterance-end①">end</a> event must not be fired for this utterance.
    <dt><dfn class="idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="event" data-export id="eventdef-speechsynthesisutterance-pause"><code>pause</code><a class="self-link" href="#eventdef-speechsynthesisutterance-pause"></a></dfn> event
    <dd>Fired when and if this utterance is paused mid-utterance.
    <dt><dfn class="idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="event" data-export id="eventdef-speechsynthesisutterance-resume"><code>resume</code><a class="self-link" href="#eventdef-speechsynthesisutterance-resume"></a></dfn> event
    <dd>Fired when and if this utterance is resumed after being paused mid-utterance.
  Adding the utterance to the queue while the global SpeechSynthesis instance is in the paused state, and then calling the resume method
  does not cause the resume event to be fired, in this case the utterance’s <a class="idl-code" data-link-type="event" href="#eventdef-speechsynthesisutterance-start" id="ref-for-eventdef-speechsynthesisutterance-start">start</a> event will be called when the utterance starts.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="event" data-export id="eventdef-speechsynthesisutterance-mark"><code>mark</code></dfn> event
    <dd>Fired when the spoken utterance reaches a named "mark" tag in SSML. <a data-link-type="biblio" href="#biblio-ssml">[SSML]</a> The user agent must fire this event if the speech synthesis engine provides the event.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisUtterance" data-dfn-type="event" data-export id="eventdef-speechsynthesisutterance-boundary"><code>boundary</code></dfn> event
    <dd>Fired when the spoken utterance reaches a word or sentence boundary.
  The user agent must fire this event if the speech synthesis engine provides the event.
   </dl>
   <h4 class="heading settled" data-level="4.2.6" id="speechsynthesisevent-attributes"><span class="secno">4.2.6. </span><span class="content">SpeechSynthesisEvent Attributes</span><a class="self-link" href="#speechsynthesisevent-attributes"></a></h4>
   <dl>
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisEvent" data-dfn-type="attribute" data-export id="dom-speechsynthesisevent-utterance"><code>utterance</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="#speechsynthesisutterance" id="ref-for-speechsynthesisutterance④">SpeechSynthesisUtterance</a>, readonly</span>
    <dd>This attribute contains the SpeechSynthesisUtterance that triggered this event.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisEvent" data-dfn-type="attribute" data-export id="dom-speechsynthesisevent-charindex"><code>charIndex</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long①⑧">unsigned long</a>, readonly</span>
    <dd>This attribute indicates the zero-based character index into the original utterance string that most closely approximates the current speaking position of the speech engine.
  No guarantee is given as to where charIndex will be with respect to word boundaries (such as at the end of the previous word or the beginning of the next word), only that all text before charIndex has already been spoken, and all text after charIndex has not yet been spoken.
  The user agent must return this value if the speech synthesis engine supports it, otherwise the user agent must return 0.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisEvent" data-dfn-type="attribute" data-export id="dom-speechsynthesisevent-charlength"><code>charLength</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long①⑨">unsigned long</a>, readonly</span>
    <dd>This attribute indicates the length of the text (word or sentence) that will be spoken corresponding to this event.
  This attribute is the length, in characters, starting from this event’s <code class="idl"><a data-link-type="idl" href="#dom-speechsynthesisevent-charindex" id="ref-for-dom-speechsynthesisevent-charindex①">charIndex</a></code>.
  The user agent must return this value if the speech synthesis engine supports it or the user agent can otherwise determine it, otherwise the user agent must return 0.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisEvent" data-dfn-type="attribute" data-export id="dom-speechsynthesisevent-elapsedtime"><code>elapsedTime</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float①④">float</a>, readonly</span>
    <dd>This attribute indicates the time, in seconds, that this event triggered, relative to when this utterance has begun to be spoken.
  The user agent must return this value if the speech synthesis engine supports it or the user agent can otherwise determine it, otherwise the user agent must return 0.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisEvent" data-dfn-type="attribute" data-export id="dom-speechsynthesisevent-name"><code>name</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString②⑤">DOMString</a>, readonly</span>
    <dd>For <a class="idl-code" data-link-type="event" href="#eventdef-speechsynthesisutterance-mark" id="ref-for-eventdef-speechsynthesisutterance-mark">mark</a> events, this attribute indicates the name of the marker, as defined in SSML as the name attribute of a mark element. <a data-link-type="biblio" href="#biblio-ssml">[SSML]</a> For <a class="idl-code" data-link-type="event" href="#eventdef-speechsynthesisutterance-boundary" id="ref-for-eventdef-speechsynthesisutterance-boundary">boundary</a> events, this attribute indicates the type of boundary that caused the event: "word" or "sentence".
  For all other events, this value should return "".
   </dl>
   <h4 class="heading settled" data-level="4.2.7" id="speechsynthesiserrorevent-attributes"><span class="secno">4.2.7. </span><span class="content">SpeechSynthesisErrorEvent Attributes</span><a class="self-link" href="#speechsynthesiserrorevent-attributes"></a></h4>
   <p>The SpeechSynthesisErrorEvent is the interface used for the SpeechSynthesisUtterance <a class="idl-code" data-link-type="event" href="#eventdef-speechsynthesisutterance-error" id="ref-for-eventdef-speechsynthesisutterance-error②">error</a> event.</p>
   <dl>
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisErrorEvent" data-dfn-type="attribute" data-export id="dom-speechsynthesiserrorevent-error"><code>error</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="#enumdef-speechsynthesiserrorcode" id="ref-for-enumdef-speechsynthesiserrorcode②">SpeechSynthesisErrorCode</a>, readonly</span>
    <dd>
     The errorCode is an enumeration indicating what has gone wrong.
  The values are: 
     <dl>
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisErrorCode" data-dfn-type="enum-value" data-export id="dom-speechsynthesiserrorcode-canceled"><code>"canceled"</code></dfn>
      <dd>A cancel method call caused the SpeechSynthesisUtterance to be removed from the queue before it had begun being spoken.
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisErrorCode" data-dfn-type="enum-value" data-export id="dom-speechsynthesiserrorcode-interrupted"><code>"interrupted"</code></dfn>
      <dd>A cancel method call caused the SpeechSynthesisUtterance to be interrupted after it has begun being spoken and before it completed.
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisErrorCode" data-dfn-type="enum-value" data-export id="dom-speechsynthesiserrorcode-audio-busy"><code>"audio-busy"</code></dfn>
      <dd>The operation cannot be completed at this time because the user-agent cannot access the audio output device.
    (For example, the user may need to correct this by closing another application.)
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisErrorCode" data-dfn-type="enum-value" data-export id="dom-speechsynthesiserrorcode-audio-hardware"><code>"audio-hardware"</code></dfn>
      <dd>The operation cannot be completed at this time because the user-agent cannot identify an audio output device.
    (For example, the user may need to connect a speaker or configure system settings.)
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisErrorCode" data-dfn-type="enum-value" data-export id="dom-speechsynthesiserrorcode-network"><code>"network"</code></dfn>
      <dd>The operation cannot be completed at this time because some required network communication failed.
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisErrorCode" data-dfn-type="enum-value" data-export id="dom-speechsynthesiserrorcode-synthesis-unavailable"><code>"synthesis-unavailable"</code></dfn>
      <dd>The operation cannot be completed at this time because no synthesis engine is available.
    (For example, the user may need to install or configure a synthesis engine.)
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisErrorCode" data-dfn-type="enum-value" data-export id="dom-speechsynthesiserrorcode-synthesis-failed"><code>"synthesis-failed"</code></dfn>
      <dd>The operation failed because synthesis engine had an error.
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisErrorCode" data-dfn-type="enum-value" data-export id="dom-speechsynthesiserrorcode-language-unavailable"><code>"language-unavailable"</code></dfn>
      <dd>No appropriate voice is available for the language designated in SpeechSynthesisUtterance lang.
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisErrorCode" data-dfn-type="enum-value" data-export id="dom-speechsynthesiserrorcode-voice-unavailable"><code>"voice-unavailable"</code></dfn>
      <dd>The voice designated in SpeechSynthesisUtterance voice attribute is not available.
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisErrorCode" data-dfn-type="enum-value" data-export id="dom-speechsynthesiserrorcode-text-too-long"><code>"text-too-long"</code></dfn>
      <dd>The contents of the SpeechSynthesisUtterance text attribute is too long to synthesize.
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisErrorCode" data-dfn-type="enum-value" data-export id="dom-speechsynthesiserrorcode-invalid-argument"><code>"invalid-argument"</code></dfn>
      <dd>The contents of the SpeechSynthesisUtterance rate, pitch or volume attribute is not supported by synthesizer.
      <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisErrorCode" data-dfn-type="enum-value" data-export id="dom-speechsynthesiserrorcode-not-allowed"><code>"not-allowed"</code></dfn>
      <dd>Synthesis was not allowed to start by the user agent or system in the current context.
     </dl>
   </dl>
   <h4 class="heading settled" data-level="4.2.8" id="speechsynthesisvoice-attributes"><span class="secno">4.2.8. </span><span class="content">SpeechSynthesisVoice Attributes</span><a class="self-link" href="#speechsynthesisvoice-attributes"></a></h4>
   <dl>
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisVoice" data-dfn-type="attribute" data-export id="dom-speechsynthesisvoice-voiceuri"><code>voiceURI</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString②⑥">DOMString</a>, readonly</span>
    <dd>The voiceURI attribute specifies the speech synthesis voice and the location of the speech synthesis service for this voice.
  Note that the voiceURI is a generic URI and can thus point to local or remote services, either through use of a URN with meaning to the user agent or by specifying a URL that the user agent recognizes as a local service.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisVoice" data-dfn-type="attribute" data-export id="dom-speechsynthesisvoice-name"><code>name</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString②⑦">DOMString</a>, readonly</span>
    <dd>This attribute is a human-readable name that represents the voice.
  There is no guarantee that all names returned are unique.
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisVoice" data-dfn-type="attribute" data-export id="dom-speechsynthesisvoice-lang"><code>lang</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString②⑧">DOMString</a>, readonly</span>
    <dd>This attribute is a BCP 47 language tag indicating the language of the voice. <a data-link-type="biblio" href="#biblio-bcp47">[BCP47]</a>
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisVoice" data-dfn-type="attribute" data-export id="dom-speechsynthesisvoice-localservice"><code>localService</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean①④">boolean</a>, readonly</span>
    <dd>This attribute is true for voices supplied by a local speech synthesizer, and is false for voices supplied by a remote speech synthesizer service.
  (This may be useful because remote services may imply additional latency, bandwidth or cost, whereas local voices may imply lower quality, however there is no guarantee that any of these implications are true.)
    <dt><dfn class="dfn-paneled idl-code" data-dfn-for="SpeechSynthesisVoice" data-dfn-type="attribute" data-export id="dom-speechsynthesisvoice-default"><code>default</code></dfn> attribute, <span> of type <a data-link-type="idl-name" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean①⑤">boolean</a>, readonly</span>
    <dd>This attribute is true for at most one voice per language.
  There may be a different default for each language.
  It is user agent dependent how default voices are determined.
   </dl>
   <h2 class="heading settled" data-level="5" id="examples"><span class="secno">5. </span><span class="content">Examples</span><a class="self-link" href="#examples"></a></h2>
   <p><em>This section is non-normative.</em></p>
   <h3 class="heading settled" data-level="5.1" id="examples-recognition"><span class="secno">5.1. </span><span class="content">Speech Recognition Examples</span><a class="self-link" href="#examples-recognition"></a></h3>
   <div class="example" id="example-6028c029">
    <a class="self-link" href="#example-6028c029"></a> 
    <p>Using speech recognition to fill an input-field and perform a web search.</p>
<pre class="lang-html highlight"><c- p>&lt;</c-><c- f>script</c-> <c- e>type</c-><c- o>=</c-><c- s>"text/javascript"</c-><c- p>></c->
  <c- a>var</c-> recognition <c- o>=</c-> <c- k>new</c-> SpeechRecognition<c- p>();</c->
  recognition<c- p>.</c->onresult <c- o>=</c-> <c- a>function</c-><c- p>(</c->event<c- p>)</c-> <c- p>{</c->
    <c- k>if</c-> <c- p>(</c->event<c- p>.</c->results<c- p>.</c->length <c- o>></c-> <c- mi>0</c-><c- p>)</c-> <c- p>{</c->
      q<c- p>.</c->value <c- o>=</c-> event<c- p>.</c->results<c- p>[</c-><c- mi>0</c-><c- p>][</c-><c- mi>0</c-><c- p>].</c->transcript<c- p>;</c->
      q<c- p>.</c->form<c- p>.</c->submit<c- p>();</c->
    <c- p>}</c->
  <c- p>}</c->
<c- p>&lt;/</c-><c- f>script</c-><c- p>></c->

<c- p>&lt;</c-><c- f>form</c-> <c- e>action</c-><c- o>=</c-><c- s>"https://www.example.com/search"</c-><c- p>></c->
  <c- p>&lt;</c-><c- f>input</c-> <c- e>type</c-><c- o>=</c-><c- s>"search"</c-> <c- e>id</c-><c- o>=</c-><c- s>"q"</c-> <c- e>name</c-><c- o>=</c-><c- s>"q"</c-> <c- e>size</c-><c- o>=</c-><c- s>60</c-><c- p>></c->
  <c- p>&lt;</c-><c- f>input</c-> <c- e>type</c-><c- o>=</c-><c- s>"button"</c-> <c- e>value</c-><c- o>=</c-><c- s>"Click to Speak"</c-> <c- e>onclick</c-><c- o>=</c-><c- s>"recognition.start()"</c-><c- p>></c->
<c- p>&lt;/</c-><c- f>form</c-><c- p>></c->
</pre>
   </div>
   <div class="example" id="example-e180055f">
    <a class="self-link" href="#example-e180055f"></a> 
    <p>Using speech recognition to fill an options list with alternative speech results.</p>
<pre class="lang-html highlight"><c- p>&lt;</c-><c- f>script</c-> <c- e>type</c-><c- o>=</c-><c- s>"text/javascript"</c-><c- p>></c->
  <c- a>var</c-> recognition <c- o>=</c-> <c- k>new</c-> SpeechRecognition<c- p>();</c->
  recognition<c- p>.</c->maxAlternatives <c- o>=</c-> <c- mi>10</c-><c- p>;</c->
  recognition<c- p>.</c->onresult <c- o>=</c-> <c- a>function</c-><c- p>(</c->event<c- p>)</c-> <c- p>{</c->
    <c- k>if</c-> <c- p>(</c->event<c- p>.</c->results<c- p>.</c->length <c- o>></c-> <c- mi>0</c-><c- p>)</c-> <c- p>{</c->
      <c- a>var</c-> result <c- o>=</c-> event<c- p>.</c->results<c- p>[</c-><c- mi>0</c-><c- p>];</c->
      <c- k>for</c-> <c- p>(</c-><c- a>var</c-> i <c- o>=</c-> <c- mi>0</c-><c- p>;</c-> i <c- o>&lt;</c-> result<c- p>.</c->length<c- p>;</c-> <c- o>++</c->i<c- p>)</c-> <c- p>{</c->
        <c- a>var</c-> text <c- o>=</c-> result<c- p>[</c->i<c- p>].</c->transcript<c- p>;</c->
        select<c- p>.</c->options<c- p>[</c->i<c- p>]</c-> <c- o>=</c-> <c- k>new</c-> Option<c- p>(</c->text<c- p>,</c-> text<c- p>);</c->
      <c- p>}</c->
    <c- p>}</c->
  <c- p>}</c->

  <c- a>function</c-> start<c- p>()</c-> <c- p>{</c->
    select<c- p>.</c->options<c- p>.</c->length <c- o>=</c-> <c- mi>0</c-><c- p>;</c->
    recognition<c- p>.</c->start<c- p>();</c->
  <c- p>}</c->
<c- p>&lt;/</c-><c- f>script</c-><c- p>></c->

<c- p>&lt;</c-><c- f>select</c-> <c- e>id</c-><c- o>=</c-><c- s>"select"</c-><c- p>>&lt;/</c-><c- f>select</c-><c- p>></c->
<c- p>&lt;</c-><c- f>button</c-> <c- e>onclick</c-><c- o>=</c-><c- s>"start()"</c-><c- p>></c->Click to Speak<c- p>&lt;/</c-><c- f>button</c-><c- p>></c->
</pre>
   </div>
   <div class="example" id="example-cd7b2fc0">
    <a class="self-link" href="#example-cd7b2fc0"></a> 
    <p>Using continuous speech recognition to fill a textarea.</p>
<pre class="lang-html highlight"><c- p>&lt;</c-><c- f>textarea</c-> <c- e>id</c-><c- o>=</c-><c- s>"textarea"</c-> <c- e>rows</c-><c- o>=</c-><c- s>10</c-> <c- e>cols</c-><c- o>=</c-><c- s>80</c-><c- p>>&lt;/</c-><c- f>textarea</c-><c- p>></c->
<c- p>&lt;</c-><c- f>button</c-> <c- e>id</c-><c- o>=</c-><c- s>"button"</c-> <c- e>onclick</c-><c- o>=</c-><c- s>"toggleStartStop()"</c-><c- p>>&lt;/</c-><c- f>button</c-><c- p>></c->

<c- p>&lt;</c-><c- f>script</c-> <c- e>type</c-><c- o>=</c-><c- s>"text/javascript"</c-><c- p>></c->
  <c- a>var</c-> recognizing<c- p>;</c->
  <c- a>var</c-> recognition <c- o>=</c-> <c- k>new</c-> SpeechRecognition<c- p>();</c->
  recognition<c- p>.</c->continuous <c- o>=</c-> <c- kc>true</c-><c- p>;</c->
  reset<c- p>();</c->
  recognition<c- p>.</c->onend <c- o>=</c-> reset<c- p>;</c->

  recognition<c- p>.</c->onresult <c- o>=</c-> <c- a>function</c-> <c- p>(</c->event<c- p>)</c-> <c- p>{</c->
    <c- k>for</c-> <c- p>(</c-><c- a>var</c-> i <c- o>=</c-> event<c- p>.</c->resultIndex<c- p>;</c-> i <c- o>&lt;</c-> event<c- p>.</c->results<c- p>.</c->length<c- p>;</c-> <c- o>++</c->i<c- p>)</c-> <c- p>{</c->
      <c- k>if</c-> <c- p>(</c->event<c- p>.</c->results<c- p>[</c->i<c- p>].</c->isFinal<c- p>)</c-> <c- p>{</c->
        textarea<c- p>.</c->value <c- o>+=</c-> event<c- p>.</c->results<c- p>[</c->i<c- p>][</c-><c- mi>0</c-><c- p>].</c->transcript<c- p>;</c->
      <c- p>}</c->
    <c- p>}</c->
  <c- p>}</c->

  <c- a>function</c-> reset<c- p>()</c-> <c- p>{</c->
    recognizing <c- o>=</c-> <c- kc>false</c-><c- p>;</c->
    button<c- p>.</c->innerHTML <c- o>=</c-> <c- u>"Click to Speak"</c-><c- p>;</c->
  <c- p>}</c->

  <c- a>function</c-> toggleStartStop<c- p>()</c-> <c- p>{</c->
    <c- k>if</c-> <c- p>(</c->recognizing<c- p>)</c-> <c- p>{</c->
      recognition<c- p>.</c->stop<c- p>();</c->
      reset<c- p>();</c->
    <c- p>}</c-> <c- k>else</c-> <c- p>{</c->
      recognition<c- p>.</c->start<c- p>();</c->
      recognizing <c- o>=</c-> <c- kc>true</c-><c- p>;</c->
      button<c- p>.</c->innerHTML <c- o>=</c-> <c- u>"Click to Stop"</c-><c- p>;</c->
    <c- p>}</c->
  <c- p>}</c->
<c- p>&lt;/</c-><c- f>script</c-><c- p>></c->
</pre>
   </div>
   <div class="example" id="example-bd8b6e17">
    <a class="self-link" href="#example-bd8b6e17"></a> 
    <p>Using continuous speech recognition, showing final results in black and interim results in grey.</p>
<pre class="lang-html highlight"><c- p>&lt;</c-><c- f>button</c-> <c- e>id</c-><c- o>=</c-><c- s>"button"</c-> <c- e>onclick</c-><c- o>=</c-><c- s>"toggleStartStop()"</c-><c- p>>&lt;/</c-><c- f>button</c-><c- p>></c->
<c- p>&lt;</c-><c- f>div</c-> <c- e>style</c-><c- o>=</c-><c- s>"border:dotted;padding:10px"</c-><c- p>></c->
  <c- p>&lt;</c-><c- f>span</c-> <c- e>id</c-><c- o>=</c-><c- s>"final_span"</c-><c- p>>&lt;/</c-><c- f>span</c-><c- p>></c->
  <c- p>&lt;</c-><c- f>span</c-> <c- e>id</c-><c- o>=</c-><c- s>"interim_span"</c-> <c- e>style</c-><c- o>=</c-><c- s>"color:grey"</c-><c- p>>&lt;/</c-><c- f>span</c-><c- p>></c->
<c- p>&lt;/</c-><c- f>div</c-><c- p>></c->

<c- p>&lt;</c-><c- f>script</c-> <c- e>type</c-><c- o>=</c-><c- s>"text/javascript"</c-><c- p>></c->
  <c- a>var</c-> recognizing<c- p>;</c->
  <c- a>var</c-> recognition <c- o>=</c-> <c- k>new</c-> SpeechRecognition<c- p>();</c->
  recognition<c- p>.</c->continuous <c- o>=</c-> <c- kc>true</c-><c- p>;</c->
  recognition<c- p>.</c->interimResults <c- o>=</c-> <c- kc>true</c-><c- p>;</c->
  reset<c- p>();</c->
  recognition<c- p>.</c->onend <c- o>=</c-> reset<c- p>;</c->

  recognition<c- p>.</c->onresult <c- o>=</c-> <c- a>function</c-> <c- p>(</c->event<c- p>)</c-> <c- p>{</c->
    <c- a>var</c-> <c- kr>final</c-> <c- o>=</c-> <c- u>""</c-><c- p>;</c->
    <c- a>var</c-> interim <c- o>=</c-> <c- u>""</c-><c- p>;</c->
    <c- k>for</c-> <c- p>(</c-><c- a>var</c-> i <c- o>=</c-> <c- mi>0</c-><c- p>;</c-> i <c- o>&lt;</c-> event<c- p>.</c->results<c- p>.</c->length<c- p>;</c-> <c- o>++</c->i<c- p>)</c-> <c- p>{</c->
      <c- k>if</c-> <c- p>(</c->event<c- p>.</c->results<c- p>[</c->i<c- p>].</c->isFinal<c- p>)</c-> <c- p>{</c->
        <c- kr>final</c-> <c- o>+=</c-> event<c- p>.</c->results<c- p>[</c->i<c- p>][</c-><c- mi>0</c-><c- p>].</c->transcript<c- p>;</c->
      <c- p>}</c-> <c- k>else</c-> <c- p>{</c->
        interim <c- o>+=</c-> event<c- p>.</c->results<c- p>[</c->i<c- p>][</c-><c- mi>0</c-><c- p>].</c->transcript<c- p>;</c->
      <c- p>}</c->
    <c- p>}</c->
    final_span<c- p>.</c->innerHTML <c- o>=</c-> <c- kr>final</c-><c- p>;</c->
    interim_span<c- p>.</c->innerHTML <c- o>=</c-> interim<c- p>;</c->
  <c- p>}</c->

  <c- a>function</c-> reset<c- p>()</c-> <c- p>{</c->
    recognizing <c- o>=</c-> <c- kc>false</c-><c- p>;</c->
    button<c- p>.</c->innerHTML <c- o>=</c-> <c- u>"Click to Speak"</c-><c- p>;</c->
  <c- p>}</c->

  <c- a>function</c-> toggleStartStop<c- p>()</c-> <c- p>{</c->
    <c- k>if</c-> <c- p>(</c->recognizing<c- p>)</c-> <c- p>{</c->
      recognition<c- p>.</c->stop<c- p>();</c->
      reset<c- p>();</c->
    <c- p>}</c-> <c- k>else</c-> <c- p>{</c->
      recognition<c- p>.</c->start<c- p>();</c->
      recognizing <c- o>=</c-> <c- kc>true</c-><c- p>;</c->
      button<c- p>.</c->innerHTML <c- o>=</c-> <c- u>"Click to Stop"</c-><c- p>;</c->
      final_span<c- p>.</c->innerHTML <c- o>=</c-> <c- u>""</c-><c- p>;</c->
      interim_span<c- p>.</c->innerHTML <c- o>=</c-> <c- u>""</c-><c- p>;</c->
    <c- p>}</c->
  <c- p>}</c->
<c- p>&lt;/</c-><c- f>script</c-><c- p>></c->
</pre>
   </div>
   <h3 class="heading settled" data-level="5.2" id="examples-synthesis"><span class="secno">5.2. </span><span class="content">Speech Synthesis Examples</span><a class="self-link" href="#examples-synthesis"></a></h3>
   <div class="example" id="example-5b46b7f4">
    <a class="self-link" href="#example-5b46b7f4"></a> 
    <p>Spoken text.</p>
<pre class="lang-html highlight"><c- p>&lt;</c-><c- f>script</c-> <c- e>type</c-><c- o>=</c-><c- s>"text/javascript"</c-><c- p>></c->
  speechSynthesis<c- p>.</c->speak<c- p>(</c-><c- k>new</c-> SpeechSynthesisUtterance<c- p>(</c-><c- t>'Hello World'</c-><c- p>));</c->
<c- p>&lt;/</c-><c- f>script</c-><c- p>></c->
</pre>
   </div>
   <div class="example" id="example-75aea718">
    <a class="self-link" href="#example-75aea718"></a> 
    <p>Spoken text with attributes and events.</p>
<pre class="lang-html highlight"><c- p>&lt;</c-><c- f>script</c-> <c- e>type</c-><c- o>=</c-><c- s>"text/javascript"</c-><c- p>></c->
  <c- a>var</c-> u <c- o>=</c-> <c- k>new</c-> SpeechSynthesisUtterance<c- p>();</c->
  u<c- p>.</c->text <c- o>=</c-> <c- t>'Hello World'</c-><c- p>;</c->
  u<c- p>.</c->lang <c- o>=</c-> <c- t>'en-US'</c-><c- p>;</c->
  u<c- p>.</c->rate <c- o>=</c-> <c- mf>1.2</c-><c- p>;</c->
  u<c- p>.</c->onend <c- o>=</c-> <c- a>function</c-><c- p>(</c->event<c- p>)</c-> <c- p>{</c-> alert<c- p>(</c-><c- t>'Finished in '</c-> <c- o>+</c-> event<c- p>.</c->elapsedTime <c- o>+</c-> <c- t>' seconds.'</c-><c- p>);</c-> <c- p>}</c->
  speechSynthesis<c- p>.</c->speak<c- p>(</c->u<c- p>);</c->
<c- p>&lt;/</c-><c- f>script</c-><c- p>></c->
</pre>
   </div>
   <h2 class="no-num heading settled" id="acknowledgments"><span class="content">Acknowledgments</span><a class="self-link" href="#acknowledgments"></a></h2>
   <p style="white-space: pre-line"> Adam Sobieski (Phoster)
  Björn Bringert (Google)
  Charles Pritchard
  Dominic Mazzoni (Google)
  Gerardo Capiel (Benetech)
  Jerry Carter
  Kagami Sascha Rosylight
  Marcos Cáceres (Mozilla)
  Nagesh Kharidi (Openstream)
  Olli Pettay (Mozilla)
  Peter Beverloo (Google)
  Raj Tumuluri (Openstream)
  Satish Sampath (Google) </p>
   <p>Also, the members of the HTML Speech Incubator Group, and the corresponding <a data-link-type="biblio" href="#biblio-htmlspeech">Final Report</a>, which created the basis for this specification.</p>
  </main>
  <div data-fill-with="conformance">
   <h2 class="no-ref no-num heading settled" id="conformance"><span class="content"> Conformance</span><a class="self-link" href="#conformance"></a></h2>
   <p> Conformance requirements are expressed with a combination of descriptive assertions and RFC 2119 terminology.
            The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL”
            in the normative parts of this document
            are to be interpreted as described in RFC 2119.
            However, for readability,
            these words do not appear in all uppercase letters in this specification. </p>
   <p> All of the text of this specification is normative
            except sections explicitly marked as non-normative, examples, and notes. <a data-link-type="biblio" href="#biblio-rfc2119">[RFC2119]</a> </p>
   <p> Examples in this specification are introduced with the words “for example”
            or are set apart from the normative text with <code>class="example"</code>, like this: </p>
   <div class="example" id="example-example"><a class="self-link" href="#example-example"></a> This is an example of an informative example. </div>
   <p> Informative notes begin with the word “Note”
            and are set apart from the normative text with <code>class="note"</code>, like this: </p>
   <p class="note" role="note"> Note, this is an informative note. </p>
  </div>
<script>
(function() {
  "use strict";
  var collapseSidebarText = '<span aria-hidden="true">←</span> '
                          + '<span>Collapse Sidebar</span>';
  var expandSidebarText   = '<span aria-hidden="true">→</span> '
                          + '<span>Pop Out Sidebar</span>';
  var tocJumpText         = '<span aria-hidden="true">↑</span> '
                          + '<span>Jump to Table of Contents</span>';

  var sidebarMedia = window.matchMedia('screen and (min-width: 78em)');
  var autoToggle   = function(e){ toggleSidebar(e.matches) };
  if(sidebarMedia.addListener) {
    sidebarMedia.addListener(autoToggle);
  }

  function toggleSidebar(on) {
    if (on == undefined) {
      on = !document.body.classList.contains('toc-sidebar');
    }

    /* Don’t scroll to compensate for the ToC if we’re above it already. */
    var headY = 0;
    var head = document.querySelector('.head');
    if (head) {
      // terrible approx of "top of ToC"
      headY += head.offsetTop + head.offsetHeight;
    }
    var skipScroll = window.scrollY < headY;

    var toggle = document.getElementById('toc-toggle');
    var tocNav = document.getElementById('toc');
    if (on) {
      var tocHeight = tocNav.offsetHeight;
      document.body.classList.add('toc-sidebar');
      document.body.classList.remove('toc-inline');
      toggle.innerHTML = collapseSidebarText;
      if (!skipScroll) {
        window.scrollBy(0, 0 - tocHeight);
      }
      tocNav.focus();
      sidebarMedia.addListener(autoToggle); // auto-collapse when out of room
    }
    else {
      document.body.classList.add('toc-inline');
      document.body.classList.remove('toc-sidebar');
      toggle.innerHTML = expandSidebarText;
      if (!skipScroll) {
        window.scrollBy(0, tocNav.offsetHeight);
      }
      if (toggle.matches(':hover')) {
        /* Unfocus button when not using keyboard navigation,
           because I don’t know where else to send the focus. */
        toggle.blur();
      }
    }
  }

  function createSidebarToggle() {
    /* Create the sidebar toggle in JS; it shouldn’t exist when JS is off. */
    var toggle = document.createElement('a');
      /* This should probably be a button, but appearance isn’t standards-track.*/
    toggle.id = 'toc-toggle';
    toggle.class = 'toc-toggle';
    toggle.href = '#toc';
    toggle.innerHTML = collapseSidebarText;

    sidebarMedia.addListener(autoToggle);
    var toggler = function(e) {
      e.preventDefault();
      sidebarMedia.removeListener(autoToggle); // persist explicit off states
      toggleSidebar();
      return false;
    }
    toggle.addEventListener('click', toggler, false);


    /* Get <nav id=toc-nav>, or make it if we don’t have one. */
    var tocNav = document.getElementById('toc-nav');
    if (!tocNav) {
      tocNav = document.createElement('p');
      tocNav.id = 'toc-nav';
      /* Prepend for better keyboard navigation */
      document.body.insertBefore(tocNav, document.body.firstChild);
    }
    /* While we’re at it, make sure we have a Jump to Toc link. */
    var tocJump = document.getElementById('toc-jump');
    if (!tocJump) {
      tocJump = document.createElement('a');
      tocJump.id = 'toc-jump';
      tocJump.href = '#toc';
      tocJump.innerHTML = tocJumpText;
      tocNav.appendChild(tocJump);
    }

    tocNav.appendChild(toggle);
  }

  var toc = document.getElementById('toc');
  if (toc) {
    createSidebarToggle();
    toggleSidebar(sidebarMedia.matches);

    /* If the sidebar has been manually opened and is currently overlaying the text
       (window too small for the MQ to add the margin to body),
       then auto-close the sidebar once you click on something in there. */
    toc.addEventListener('click', function(e) {
      if(e.target.tagName.toLowerCase() == "a" && document.body.classList.contains('toc-sidebar') && !sidebarMedia.matches) {
        toggleSidebar(false);
      }
    }, false);
  }
  else {
    console.warn("Can’t find Table of Contents. Please use <nav id='toc'> around the ToC.");
  }

  /* Wrap tables in case they overflow */
  var tables = document.querySelectorAll(':not(.overlarge) > table.data, :not(.overlarge) > table.index');
  var numTables = tables.length;
  for (var i = 0; i < numTables; i++) {
    var table = tables[i];
    var wrapper = document.createElement('div');
    wrapper.className = 'overlarge';
    table.parentNode.insertBefore(wrapper, table);
    wrapper.appendChild(table);
  }

})();
</script>
  <h2 class="no-num no-ref heading settled" id="index"><span class="content">Index</span><a class="self-link" href="#index"></a></h2>
  <h3 class="no-num no-ref heading settled" id="index-defined-here"><span class="content">Terms defined by this specification</span><a class="self-link" href="#index-defined-here"></a></h3>
  <ul class="index">
   <li><a href="#dom-speechrecognition-abort">abort()</a><span>, in §4.1.2</span>
   <li><a href="#dom-speechrecognitionerrorcode-aborted">"aborted"</a><span>, in §4.1.4</span>
   <li><a href="#dom-speechgrammarlist-addfromstring">addFromString(string)</a><span>, in §4.1.10</span>
   <li><a href="#dom-speechgrammarlist-addfromstring">addFromString(string, weight)</a><span>, in §4.1.10</span>
   <li><a href="#dom-speechgrammarlist-addfromuri">addFromURI(src)</a><span>, in §4.1.10</span>
   <li><a href="#dom-speechgrammarlist-addfromuri">addFromURI(src, weight)</a><span>, in §4.1.10</span>
   <li><a href="#dom-speechsynthesiserrorcode-audio-busy">"audio-busy"</a><span>, in §4.2.7</span>
   <li><a href="#dom-speechrecognitionerrorcode-audio-capture">"audio-capture"</a><span>, in §4.1.4</span>
   <li><a href="#eventdef-speechrecognition-audioend">audioend</a><span>, in §4.1.3</span>
   <li><a href="#dom-speechsynthesiserrorcode-audio-hardware">"audio-hardware"</a><span>, in §4.2.7</span>
   <li><a href="#eventdef-speechrecognition-audiostart">audiostart</a><span>, in §4.1.3</span>
   <li><a href="#dom-speechrecognitionerrorcode-bad-grammar">"bad-grammar"</a><span>, in §4.1.4</span>
   <li><a href="#eventdef-speechsynthesisutterance-boundary">boundary</a><span>, in §4.2.5</span>
   <li><a href="#dom-speechsynthesis-cancel">cancel()</a><span>, in §4.2.2</span>
   <li><a href="#dom-speechsynthesiserrorcode-canceled">"canceled"</a><span>, in §4.2.7</span>
   <li>
    charIndex
    <ul>
     <li><a href="#dom-speechsynthesisevent-charindex">attribute for SpeechSynthesisEvent</a><span>, in §4.2.6</span>
     <li><a href="#dom-speechsynthesiseventinit-charindex">dict-member for SpeechSynthesisEventInit</a><span>, in §4.2</span>
    </ul>
   <li>
    charLength
    <ul>
     <li><a href="#dom-speechsynthesisevent-charlength">attribute for SpeechSynthesisEvent</a><span>, in §4.2.6</span>
     <li><a href="#dom-speechsynthesiseventinit-charlength">dict-member for SpeechSynthesisEventInit</a><span>, in §4.2</span>
    </ul>
   <li><a href="#dom-speechrecognitionalternative-confidence">confidence</a><span>, in §4.1.5</span>
   <li>
    constructor()
    <ul>
     <li><a href="#dom-speechgrammarlist-speechgrammarlist">constructor for SpeechGrammarList</a><span>, in §4.1</span>
     <li><a href="#dom-speechrecognition-speechrecognition">constructor for SpeechRecognition</a><span>, in §4.1</span>
     <li><a href="#dom-speechsynthesisutterance-speechsynthesisutterance">constructor for SpeechSynthesisUtterance</a><span>, in §4.2</span>
    </ul>
   <li><a href="#dom-speechsynthesisutterance-speechsynthesisutterance">constructor(text)</a><span>, in §4.2</span>
   <li>
    constructor(type, eventInitDict)
    <ul>
     <li><a href="#dom-speechrecognitionerrorevent-speechrecognitionerrorevent">constructor for SpeechRecognitionErrorEvent</a><span>, in §4.1</span>
     <li><a href="#dom-speechrecognitionevent-speechrecognitionevent">constructor for SpeechRecognitionEvent</a><span>, in §4.1</span>
     <li><a href="#dom-speechsynthesiserrorevent-speechsynthesiserrorevent">constructor for SpeechSynthesisErrorEvent</a><span>, in §4.2</span>
     <li><a href="#dom-speechsynthesisevent-speechsynthesisevent">constructor for SpeechSynthesisEvent</a><span>, in §4.2</span>
    </ul>
   <li><a href="#dom-speechrecognition-continuous">continuous</a><span>, in §4.1.1</span>
   <li><a href="#dom-speechsynthesisvoice-default">default</a><span>, in §4.2.8</span>
   <li>
    elapsedTime
    <ul>
     <li><a href="#dom-speechsynthesisevent-elapsedtime">attribute for SpeechSynthesisEvent</a><span>, in §4.2.6</span>
     <li><a href="#dom-speechsynthesiseventinit-elapsedtime">dict-member for SpeechSynthesisEventInit</a><span>, in §4.2</span>
    </ul>
   <li>
    end
    <ul>
     <li><a href="#eventdef-speechrecognition-end">event for SpeechRecognition</a><span>, in §4.1.3</span>
     <li><a href="#eventdef-speechsynthesisutterance-end">event for SpeechSynthesisUtterance</a><span>, in §4.2.5</span>
    </ul>
   <li>
    error
    <ul>
     <li><a href="#dom-speechrecognitionerrorevent-error">attribute for SpeechRecognitionErrorEvent</a><span>, in §4.1.4</span>
     <li><a href="#dom-speechsynthesiserrorevent-error">attribute for SpeechSynthesisErrorEvent</a><span>, in §4.2.7</span>
     <li><a href="#dom-speechrecognitionerroreventinit-error">dict-member for SpeechRecognitionErrorEventInit</a><span>, in §4.1</span>
     <li><a href="#dom-speechsynthesiserroreventinit-error">dict-member for SpeechSynthesisErrorEventInit</a><span>, in §4.2</span>
     <li><a href="#eventdef-speechrecognition-error">event for SpeechRecognition</a><span>, in §4.1.3</span>
     <li><a href="#eventdef-speechsynthesisutterance-error">event for SpeechSynthesisUtterance</a><span>, in §4.2.5</span>
    </ul>
   <li><a href="#dom-speechsynthesis-getvoices">getVoices()</a><span>, in §4.2.2</span>
   <li><a href="#dom-speechrecognition-grammars">grammars</a><span>, in §4.1.1</span>
   <li><a href="#dom-speechrecognition-interimresults">interimResults</a><span>, in §4.1.1</span>
   <li><a href="#dom-speechsynthesiserrorcode-interrupted">"interrupted"</a><span>, in §4.2.7</span>
   <li><a href="#dom-speechsynthesiserrorcode-invalid-argument">"invalid-argument"</a><span>, in §4.2.7</span>
   <li><a href="#dom-speechrecognitionresult-isfinal">isFinal</a><span>, in §4.1.6</span>
   <li>
    item(index)
    <ul>
     <li><a href="#dom-speechgrammarlist-item">method for SpeechGrammarList</a><span>, in §4.1.10</span>
     <li><a href="#dom-speechrecognitionresult-item">method for SpeechRecognitionResult</a><span>, in §4.1.6</span>
     <li><a href="#dom-speechrecognitionresultlist-item">method for SpeechRecognitionResultList</a><span>, in §4.1.7</span>
    </ul>
   <li>
    lang
    <ul>
     <li><a href="#dom-speechrecognition-lang">attribute for SpeechRecognition</a><span>, in §4.1.1</span>
     <li><a href="#dom-speechsynthesisutterance-lang">attribute for SpeechSynthesisUtterance</a><span>, in §4.2.4</span>
     <li><a href="#dom-speechsynthesisvoice-lang">attribute for SpeechSynthesisVoice</a><span>, in §4.2.8</span>
    </ul>
   <li><a href="#dom-speechrecognitionerrorcode-language-not-supported">"language-not-supported"</a><span>, in §4.1.4</span>
   <li><a href="#dom-speechsynthesiserrorcode-language-unavailable">"language-unavailable"</a><span>, in §4.2.7</span>
   <li>
    length
    <ul>
     <li><a href="#dom-speechgrammarlist-length">attribute for SpeechGrammarList</a><span>, in §4.1.10</span>
     <li><a href="#dom-speechrecognitionresult-length">attribute for SpeechRecognitionResult</a><span>, in §4.1.6</span>
     <li><a href="#dom-speechrecognitionresultlist-length">attribute for SpeechRecognitionResultList</a><span>, in §4.1.7</span>
    </ul>
   <li><a href="#dom-speechsynthesisvoice-localservice">localService</a><span>, in §4.2.8</span>
   <li><a href="#eventdef-speechsynthesisutterance-mark">mark</a><span>, in §4.2.5</span>
   <li><a href="#dom-speechrecognition-maxalternatives">maxAlternatives</a><span>, in §4.1.1</span>
   <li>
    message
    <ul>
     <li><a href="#dom-speechrecognitionerrorevent-message">attribute for SpeechRecognitionErrorEvent</a><span>, in §4.1.4</span>
     <li><a href="#dom-speechrecognitionerroreventinit-message">dict-member for SpeechRecognitionErrorEventInit</a><span>, in §4.1</span>
    </ul>
   <li>
    name
    <ul>
     <li><a href="#dom-speechsynthesisevent-name">attribute for SpeechSynthesisEvent</a><span>, in §4.2.6</span>
     <li><a href="#dom-speechsynthesisvoice-name">attribute for SpeechSynthesisVoice</a><span>, in §4.2.8</span>
     <li><a href="#dom-speechsynthesiseventinit-name">dict-member for SpeechSynthesisEventInit</a><span>, in §4.2</span>
    </ul>
   <li>
    "network"
    <ul>
     <li><a href="#dom-speechrecognitionerrorcode-network">enum-value for SpeechRecognitionErrorCode</a><span>, in §4.1.4</span>
     <li><a href="#dom-speechsynthesiserrorcode-network">enum-value for SpeechSynthesisErrorCode</a><span>, in §4.2.7</span>
    </ul>
   <li><a href="#eventdef-speechrecognition-nomatch">nomatch</a><span>, in §4.1.3</span>
   <li><a href="#dom-speechrecognitionerrorcode-no-speech">"no-speech"</a><span>, in §4.1.4</span>
   <li>
    "not-allowed"
    <ul>
     <li><a href="#dom-speechrecognitionerrorcode-not-allowed">enum-value for SpeechRecognitionErrorCode</a><span>, in §4.1.4</span>
     <li><a href="#dom-speechsynthesiserrorcode-not-allowed">enum-value for SpeechSynthesisErrorCode</a><span>, in §4.2.7</span>
    </ul>
   <li><a href="#dom-speechrecognition-onaudioend">onaudioend</a><span>, in §4.1</span>
   <li><a href="#dom-speechrecognition-onaudiostart">onaudiostart</a><span>, in §4.1</span>
   <li><a href="#dom-speechsynthesisutterance-onboundary">onboundary</a><span>, in §4.2</span>
   <li>
    onend
    <ul>
     <li><a href="#dom-speechrecognition-onend">attribute for SpeechRecognition</a><span>, in §4.1</span>
     <li><a href="#dom-speechsynthesisutterance-onend">attribute for SpeechSynthesisUtterance</a><span>, in §4.2</span>
    </ul>
   <li>
    onerror
    <ul>
     <li><a href="#dom-speechrecognition-onerror">attribute for SpeechRecognition</a><span>, in §4.1</span>
     <li><a href="#dom-speechsynthesisutterance-onerror">attribute for SpeechSynthesisUtterance</a><span>, in §4.2</span>
    </ul>
   <li><a href="#dom-speechsynthesisutterance-onmark">onmark</a><span>, in §4.2</span>
   <li><a href="#dom-speechrecognition-onnomatch">onnomatch</a><span>, in §4.1</span>
   <li><a href="#dom-speechsynthesisutterance-onpause">onpause</a><span>, in §4.2</span>
   <li><a href="#dom-speechrecognition-onresult">onresult</a><span>, in §4.1</span>
   <li><a href="#dom-speechsynthesisutterance-onresume">onresume</a><span>, in §4.2</span>
   <li><a href="#dom-speechrecognition-onsoundend">onsoundend</a><span>, in §4.1</span>
   <li><a href="#dom-speechrecognition-onsoundstart">onsoundstart</a><span>, in §4.1</span>
   <li><a href="#dom-speechrecognition-onspeechend">onspeechend</a><span>, in §4.1</span>
   <li><a href="#dom-speechrecognition-onspeechstart">onspeechstart</a><span>, in §4.1</span>
   <li>
    onstart
    <ul>
     <li><a href="#dom-speechrecognition-onstart">attribute for SpeechRecognition</a><span>, in §4.1</span>
     <li><a href="#dom-speechsynthesisutterance-onstart">attribute for SpeechSynthesisUtterance</a><span>, in §4.2</span>
    </ul>
   <li><a href="#dom-speechsynthesis-onvoiceschanged">onvoiceschanged</a><span>, in §4.2</span>
   <li><a href="#dom-speechsynthesis-pause">pause()</a><span>, in §4.2.2</span>
   <li><a href="#eventdef-speechsynthesisutterance-pause">pause</a><span>, in §4.2.5</span>
   <li><a href="#dom-speechsynthesis-paused">paused</a><span>, in §4.2.1</span>
   <li><a href="#dom-speechsynthesis-pending">pending</a><span>, in §4.2.1</span>
   <li><a href="#dom-speechsynthesisutterance-pitch">pitch</a><span>, in §4.2.4</span>
   <li><a href="#dom-speechsynthesisutterance-rate">rate</a><span>, in §4.2.4</span>
   <li><a href="#eventdef-speechrecognition-result">result</a><span>, in §4.1.3</span>
   <li>
    resultIndex
    <ul>
     <li><a href="#dom-speechrecognitionevent-resultindex">attribute for SpeechRecognitionEvent</a><span>, in §4.1.8</span>
     <li><a href="#dom-speechrecognitioneventinit-resultindex">dict-member for SpeechRecognitionEventInit</a><span>, in §4.1</span>
    </ul>
   <li>
    results
    <ul>
     <li><a href="#dom-speechrecognitionevent-results">attribute for SpeechRecognitionEvent</a><span>, in §4.1.8</span>
     <li><a href="#dom-speechrecognitioneventinit-results">dict-member for SpeechRecognitionEventInit</a><span>, in §4.1</span>
    </ul>
   <li><a href="#eventdef-speechsynthesisutterance-resume">resume</a><span>, in §4.2.5</span>
   <li><a href="#dom-speechsynthesis-resume">resume()</a><span>, in §4.2.2</span>
   <li><a href="#dom-speechrecognitionerrorcode-service-not-allowed">"service-not-allowed"</a><span>, in §4.1.4</span>
   <li><a href="#eventdef-speechrecognition-soundend">soundend</a><span>, in §4.1.3</span>
   <li><a href="#eventdef-speechrecognition-soundstart">soundstart</a><span>, in §4.1.3</span>
   <li><a href="#dom-speechsynthesis-speaking">speaking</a><span>, in §4.2.1</span>
   <li><a href="#dom-speechsynthesis-speak">speak(utterance)</a><span>, in §4.2.2</span>
   <li><a href="#eventdef-speechrecognition-speechend">speechend</a><span>, in §4.1.3</span>
   <li><a href="#speechgrammar">SpeechGrammar</a><span>, in §4.1</span>
   <li><a href="#speechgrammarlist">SpeechGrammarList</a><span>, in §4.1</span>
   <li><a href="#dom-speechgrammarlist-speechgrammarlist">SpeechGrammarList()</a><span>, in §4.1</span>
   <li><a href="#dom-speechrecognition-speechrecognition">SpeechRecognition()</a><span>, in §4.1</span>
   <li><a href="#speechrecognition">SpeechRecognition</a><span>, in §4.1</span>
   <li><a href="#speechrecognitionalternative">SpeechRecognitionAlternative</a><span>, in §4.1</span>
   <li><a href="#enumdef-speechrecognitionerrorcode">SpeechRecognitionErrorCode</a><span>, in §4.1</span>
   <li><a href="#speechrecognitionerrorevent">SpeechRecognitionErrorEvent</a><span>, in §4.1</span>
   <li><a href="#dictdef-speechrecognitionerroreventinit">SpeechRecognitionErrorEventInit</a><span>, in §4.1</span>
   <li><a href="#dom-speechrecognitionerrorevent-speechrecognitionerrorevent">SpeechRecognitionErrorEvent(type, eventInitDict)</a><span>, in §4.1</span>
   <li><a href="#speechrecognitionevent">SpeechRecognitionEvent</a><span>, in §4.1</span>
   <li><a href="#dictdef-speechrecognitioneventinit">SpeechRecognitionEventInit</a><span>, in §4.1</span>
   <li><a href="#dom-speechrecognitionevent-speechrecognitionevent">SpeechRecognitionEvent(type, eventInitDict)</a><span>, in §4.1</span>
   <li><a href="#speechrecognitionresult">SpeechRecognitionResult</a><span>, in §4.1</span>
   <li><a href="#speechrecognitionresultlist">SpeechRecognitionResultList</a><span>, in §4.1</span>
   <li><a href="#eventdef-speechrecognition-speechstart">speechstart</a><span>, in §4.1.3</span>
   <li><a href="#dom-window-speechsynthesis">speechSynthesis</a><span>, in §4.2</span>
   <li><a href="#speechsynthesis">SpeechSynthesis</a><span>, in §4.2</span>
   <li><a href="#enumdef-speechsynthesiserrorcode">SpeechSynthesisErrorCode</a><span>, in §4.2</span>
   <li><a href="#speechsynthesiserrorevent">SpeechSynthesisErrorEvent</a><span>, in §4.2</span>
   <li><a href="#dictdef-speechsynthesiserroreventinit">SpeechSynthesisErrorEventInit</a><span>, in §4.2</span>
   <li><a href="#dom-speechsynthesiserrorevent-speechsynthesiserrorevent">SpeechSynthesisErrorEvent(type, eventInitDict)</a><span>, in §4.2</span>
   <li><a href="#speechsynthesisevent">SpeechSynthesisEvent</a><span>, in §4.2</span>
   <li><a href="#dictdef-speechsynthesiseventinit">SpeechSynthesisEventInit</a><span>, in §4.2</span>
   <li><a href="#dom-speechsynthesisevent-speechsynthesisevent">SpeechSynthesisEvent(type, eventInitDict)</a><span>, in §4.2</span>
   <li><a href="#speechsynthesisutterance">SpeechSynthesisUtterance</a><span>, in §4.2</span>
   <li><a href="#dom-speechsynthesisutterance-speechsynthesisutterance">SpeechSynthesisUtterance()</a><span>, in §4.2</span>
   <li><a href="#dom-speechsynthesisutterance-speechsynthesisutterance">SpeechSynthesisUtterance(text)</a><span>, in §4.2</span>
   <li><a href="#speechsynthesisvoice">SpeechSynthesisVoice</a><span>, in §4.2</span>
   <li><a href="#dom-speechgrammar-src">src</a><span>, in §4.1.9</span>
   <li>
    start
    <ul>
     <li><a href="#eventdef-speechrecognition-start">event for SpeechRecognition</a><span>, in §4.1.3</span>
     <li><a href="#eventdef-speechsynthesisutterance-start">event for SpeechSynthesisUtterance</a><span>, in §4.2.5</span>
    </ul>
   <li><a href="#dom-speechrecognition-start">start()</a><span>, in §4.1.2</span>
   <li><a href="#dom-speechrecognition-stop">stop()</a><span>, in §4.1.2</span>
   <li><a href="#dom-speechsynthesiserrorcode-synthesis-failed">"synthesis-failed"</a><span>, in §4.2.7</span>
   <li><a href="#dom-speechsynthesiserrorcode-synthesis-unavailable">"synthesis-unavailable"</a><span>, in §4.2.7</span>
   <li><a href="#dom-speechsynthesisutterance-text">text</a><span>, in §4.2.4</span>
   <li><a href="#dom-speechsynthesiserrorcode-text-too-long">"text-too-long"</a><span>, in §4.2.7</span>
   <li><a href="#dom-speechrecognitionalternative-transcript">transcript</a><span>, in §4.1.5</span>
   <li>
    utterance
    <ul>
     <li><a href="#dom-speechsynthesisevent-utterance">attribute for SpeechSynthesisEvent</a><span>, in §4.2.6</span>
     <li><a href="#dom-speechsynthesiseventinit-utterance">dict-member for SpeechSynthesisEventInit</a><span>, in §4.2</span>
    </ul>
   <li><a href="#dom-speechsynthesisutterance-voice">voice</a><span>, in §4.2.4</span>
   <li><a href="#eventdef-speechsynthesis-voiceschanged">voiceschanged</a><span>, in §4.2.3</span>
   <li><a href="#dom-speechsynthesiserrorcode-voice-unavailable">"voice-unavailable"</a><span>, in §4.2.7</span>
   <li><a href="#dom-speechsynthesisvoice-voiceuri">voiceURI</a><span>, in §4.2.8</span>
   <li><a href="#dom-speechsynthesisutterance-volume">volume</a><span>, in §4.2.4</span>
   <li><a href="#dom-speechgrammar-weight">weight</a><span>, in §4.1.9</span>
  </ul>
  <aside class="dfn-panel" data-for="term-for-event">
   <a href="https://dom.spec.whatwg.org/#event">https://dom.spec.whatwg.org/#event</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-event">4.1. The SpeechRecognition Interface</a> <a href="#ref-for-event①">(2)</a>
    <li><a href="#ref-for-event②">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-dictdef-eventinit">
   <a href="https://dom.spec.whatwg.org/#dictdef-eventinit">https://dom.spec.whatwg.org/#dictdef-eventinit</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dictdef-eventinit">4.1. The SpeechRecognition Interface</a> <a href="#ref-for-dictdef-eventinit①">(2)</a>
    <li><a href="#ref-for-dictdef-eventinit②">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-eventtarget">
   <a href="https://dom.spec.whatwg.org/#eventtarget">https://dom.spec.whatwg.org/#eventtarget</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eventtarget">4.1. The SpeechRecognition Interface</a>
    <li><a href="#ref-for-eventtarget①">4.2. The SpeechSynthesis Interface</a> <a href="#ref-for-eventtarget②">(2)</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-eventhandler">
   <a href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler">https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eventhandler">4.1. The SpeechRecognition Interface</a> <a href="#ref-for-eventhandler①">(2)</a> <a href="#ref-for-eventhandler②">(3)</a> <a href="#ref-for-eventhandler③">(4)</a> <a href="#ref-for-eventhandler④">(5)</a> <a href="#ref-for-eventhandler⑤">(6)</a> <a href="#ref-for-eventhandler⑥">(7)</a> <a href="#ref-for-eventhandler⑦">(8)</a> <a href="#ref-for-eventhandler⑧">(9)</a> <a href="#ref-for-eventhandler⑨">(10)</a> <a href="#ref-for-eventhandler①⓪">(11)</a>
    <li><a href="#ref-for-eventhandler①①">4.2. The SpeechSynthesis Interface</a> <a href="#ref-for-eventhandler①②">(2)</a> <a href="#ref-for-eventhandler①③">(3)</a> <a href="#ref-for-eventhandler①④">(4)</a> <a href="#ref-for-eventhandler①⑤">(5)</a> <a href="#ref-for-eventhandler①⑥">(6)</a> <a href="#ref-for-eventhandler①⑦">(7)</a> <a href="#ref-for-eventhandler①⑧">(8)</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-window">
   <a href="https://html.spec.whatwg.org/multipage/window-object.html#window">https://html.spec.whatwg.org/multipage/window-object.html#window</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-window">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-language">
   <a href="https://html.spec.whatwg.org/multipage/dom.html#language">https://html.spec.whatwg.org/multipage/dom.html#language</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-language">4.1.1. SpeechRecognition Attributes</a>
    <li><a href="#ref-for-language①">4.2.4. SpeechSynthesisUtterance Attributes</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-idl-DOMException">
   <a href="https://heycam.github.io/webidl/#idl-DOMException">https://heycam.github.io/webidl/#idl-DOMException</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-DOMException">4.1.2. SpeechRecognition Methods</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-idl-DOMString">
   <a href="https://heycam.github.io/webidl/#idl-DOMString">https://heycam.github.io/webidl/#idl-DOMString</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-DOMString">4.1. The SpeechRecognition Interface</a> <a href="#ref-for-idl-DOMString①">(2)</a> <a href="#ref-for-idl-DOMString②">(3)</a> <a href="#ref-for-idl-DOMString③">(4)</a> <a href="#ref-for-idl-DOMString④">(5)</a> <a href="#ref-for-idl-DOMString⑤">(6)</a> <a href="#ref-for-idl-DOMString⑥">(7)</a> <a href="#ref-for-idl-DOMString⑦">(8)</a> <a href="#ref-for-idl-DOMString⑧">(9)</a>
    <li><a href="#ref-for-idl-DOMString⑨">4.1.1. SpeechRecognition Attributes</a>
    <li><a href="#ref-for-idl-DOMString①⓪">4.1.4. SpeechRecognitionErrorEvent</a>
    <li><a href="#ref-for-idl-DOMString①①">4.1.5. SpeechRecognitionAlternative</a>
    <li><a href="#ref-for-idl-DOMString①②">4.1.9. SpeechGrammar</a>
    <li><a href="#ref-for-idl-DOMString①③">4.2. The SpeechSynthesis Interface</a> <a href="#ref-for-idl-DOMString①④">(2)</a> <a href="#ref-for-idl-DOMString①⑤">(3)</a> <a href="#ref-for-idl-DOMString①⑥">(4)</a> <a href="#ref-for-idl-DOMString①⑦">(5)</a> <a href="#ref-for-idl-DOMString①⑧">(6)</a> <a href="#ref-for-idl-DOMString①⑨">(7)</a> <a href="#ref-for-idl-DOMString②⓪">(8)</a> <a href="#ref-for-idl-DOMString②①">(9)</a> <a href="#ref-for-idl-DOMString②②">(10)</a>
    <li><a href="#ref-for-idl-DOMString②③">4.2.4. SpeechSynthesisUtterance Attributes</a> <a href="#ref-for-idl-DOMString②④">(2)</a>
    <li><a href="#ref-for-idl-DOMString②⑤">4.2.6. SpeechSynthesisEvent Attributes</a>
    <li><a href="#ref-for-idl-DOMString②⑥">4.2.8. SpeechSynthesisVoice Attributes</a> <a href="#ref-for-idl-DOMString②⑦">(2)</a> <a href="#ref-for-idl-DOMString②⑧">(3)</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-Exposed">
   <a href="https://heycam.github.io/webidl/#Exposed">https://heycam.github.io/webidl/#Exposed</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-Exposed">4.1. The SpeechRecognition Interface</a> <a href="#ref-for-Exposed①">(2)</a> <a href="#ref-for-Exposed②">(3)</a> <a href="#ref-for-Exposed③">(4)</a> <a href="#ref-for-Exposed④">(5)</a> <a href="#ref-for-Exposed⑤">(6)</a> <a href="#ref-for-Exposed⑥">(7)</a> <a href="#ref-for-Exposed⑦">(8)</a>
    <li><a href="#ref-for-Exposed⑧">4.2. The SpeechSynthesis Interface</a> <a href="#ref-for-Exposed⑨">(2)</a> <a href="#ref-for-Exposed①⓪">(3)</a> <a href="#ref-for-Exposed①①">(4)</a> <a href="#ref-for-Exposed①②">(5)</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-invalidstateerror">
   <a href="https://heycam.github.io/webidl/#invalidstateerror">https://heycam.github.io/webidl/#invalidstateerror</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-invalidstateerror">4.1.2. SpeechRecognition Methods</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-SameObject">
   <a href="https://heycam.github.io/webidl/#SameObject">https://heycam.github.io/webidl/#SameObject</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-SameObject">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-idl-boolean">
   <a href="https://heycam.github.io/webidl/#idl-boolean">https://heycam.github.io/webidl/#idl-boolean</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-boolean">4.1. The SpeechRecognition Interface</a> <a href="#ref-for-idl-boolean①">(2)</a> <a href="#ref-for-idl-boolean②">(3)</a>
    <li><a href="#ref-for-idl-boolean③">4.1.1. SpeechRecognition Attributes</a> <a href="#ref-for-idl-boolean④">(2)</a>
    <li><a href="#ref-for-idl-boolean⑤">4.1.6. SpeechRecognitionResult</a>
    <li><a href="#ref-for-idl-boolean⑥">4.2. The SpeechSynthesis Interface</a> <a href="#ref-for-idl-boolean⑦">(2)</a> <a href="#ref-for-idl-boolean⑧">(3)</a> <a href="#ref-for-idl-boolean⑨">(4)</a> <a href="#ref-for-idl-boolean①⓪">(5)</a>
    <li><a href="#ref-for-idl-boolean①①">4.2.1. SpeechSynthesis Attributes</a> <a href="#ref-for-idl-boolean①②">(2)</a> <a href="#ref-for-idl-boolean①③">(3)</a>
    <li><a href="#ref-for-idl-boolean①④">4.2.8. SpeechSynthesisVoice Attributes</a> <a href="#ref-for-idl-boolean①⑤">(2)</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-idl-float">
   <a href="https://heycam.github.io/webidl/#idl-float">https://heycam.github.io/webidl/#idl-float</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-float">4.1. The SpeechRecognition Interface</a> <a href="#ref-for-idl-float①">(2)</a> <a href="#ref-for-idl-float②">(3)</a> <a href="#ref-for-idl-float③">(4)</a>
    <li><a href="#ref-for-idl-float④">4.1.5. SpeechRecognitionAlternative</a>
    <li><a href="#ref-for-idl-float⑤">4.1.9. SpeechGrammar</a>
    <li><a href="#ref-for-idl-float⑥">4.2. The SpeechSynthesis Interface</a> <a href="#ref-for-idl-float⑦">(2)</a> <a href="#ref-for-idl-float⑧">(3)</a> <a href="#ref-for-idl-float⑨">(4)</a> <a href="#ref-for-idl-float①⓪">(5)</a>
    <li><a href="#ref-for-idl-float①①">4.2.4. SpeechSynthesisUtterance Attributes</a> <a href="#ref-for-idl-float①②">(2)</a> <a href="#ref-for-idl-float①③">(3)</a>
    <li><a href="#ref-for-idl-float①④">4.2.6. SpeechSynthesisEvent Attributes</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-idl-unsigned-long">
   <a href="https://heycam.github.io/webidl/#idl-unsigned-long">https://heycam.github.io/webidl/#idl-unsigned-long</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-unsigned-long">4.1. The SpeechRecognition Interface</a> <a href="#ref-for-idl-unsigned-long①">(2)</a> <a href="#ref-for-idl-unsigned-long②">(3)</a> <a href="#ref-for-idl-unsigned-long③">(4)</a> <a href="#ref-for-idl-unsigned-long④">(5)</a> <a href="#ref-for-idl-unsigned-long⑤">(6)</a> <a href="#ref-for-idl-unsigned-long⑥">(7)</a> <a href="#ref-for-idl-unsigned-long⑦">(8)</a> <a href="#ref-for-idl-unsigned-long⑧">(9)</a>
    <li><a href="#ref-for-idl-unsigned-long⑨">4.1.1. SpeechRecognition Attributes</a>
    <li><a href="#ref-for-idl-unsigned-long①⓪">4.1.6. SpeechRecognitionResult</a>
    <li><a href="#ref-for-idl-unsigned-long①①">4.1.7. SpeechRecognitionResultList</a>
    <li><a href="#ref-for-idl-unsigned-long①②">4.1.8. SpeechRecognitionEvent</a>
    <li><a href="#ref-for-idl-unsigned-long①③">4.1.10. SpeechGrammarList</a>
    <li><a href="#ref-for-idl-unsigned-long①④">4.2. The SpeechSynthesis Interface</a> <a href="#ref-for-idl-unsigned-long①⑤">(2)</a> <a href="#ref-for-idl-unsigned-long①⑥">(3)</a> <a href="#ref-for-idl-unsigned-long①⑦">(4)</a>
    <li><a href="#ref-for-idl-unsigned-long①⑧">4.2.6. SpeechSynthesisEvent Attributes</a> <a href="#ref-for-idl-unsigned-long①⑨">(2)</a>
   </ul>
  </aside>
  <h3 class="no-num no-ref heading settled" id="index-defined-elsewhere"><span class="content">Terms defined by reference</span><a class="self-link" href="#index-defined-elsewhere"></a></h3>
  <ul class="index">
   <li>
    <a data-link-type="biblio">[DOM]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-event" style="color:initial">Event</span>
     <li><span class="dfn-paneled" id="term-for-dictdef-eventinit" style="color:initial">EventInit</span>
     <li><span class="dfn-paneled" id="term-for-eventtarget" style="color:initial">EventTarget</span>
    </ul>
   <li>
    <a data-link-type="biblio">[HTML]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-eventhandler" style="color:initial">EventHandler</span>
     <li><span class="dfn-paneled" id="term-for-window" style="color:initial">Window</span>
     <li><span class="dfn-paneled" id="term-for-language" style="color:initial">language</span>
    </ul>
   <li>
    <a data-link-type="biblio">[WebIDL]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-idl-DOMException" style="color:initial">DOMException</span>
     <li><span class="dfn-paneled" id="term-for-idl-DOMString" style="color:initial">DOMString</span>
     <li><span class="dfn-paneled" id="term-for-Exposed" style="color:initial">Exposed</span>
     <li><span class="dfn-paneled" id="term-for-invalidstateerror" style="color:initial">InvalidStateError</span>
     <li><span class="dfn-paneled" id="term-for-SameObject" style="color:initial">SameObject</span>
     <li><span class="dfn-paneled" id="term-for-idl-boolean" style="color:initial">boolean</span>
     <li><span class="dfn-paneled" id="term-for-idl-float" style="color:initial">float</span>
     <li><span class="dfn-paneled" id="term-for-idl-unsigned-long" style="color:initial">unsigned long</span>
    </ul>
  </ul>
  <h2 class="no-num no-ref heading settled" id="references"><span class="content">References</span><a class="self-link" href="#references"></a></h2>
  <h3 class="no-num no-ref heading settled" id="normative"><span class="content">Normative References</span><a class="self-link" href="#normative"></a></h3>
  <dl>
   <dt id="biblio-bcp47">[BCP47]
   <dd>A. Phillips; M. Davis. <a href="https://tools.ietf.org/html/bcp47">Tags for Identifying Languages</a>. September 2009. IETF Best Current Practice. URL: <a href="https://tools.ietf.org/html/bcp47">https://tools.ietf.org/html/bcp47</a>
   <dt id="biblio-dom">[DOM]
   <dd>Anne van Kesteren. <a href="https://dom.spec.whatwg.org/">DOM Standard</a>. Living Standard. URL: <a href="https://dom.spec.whatwg.org/">https://dom.spec.whatwg.org/</a>
   <dt id="biblio-html">[HTML]
   <dd>Anne van Kesteren; et al. <a href="https://html.spec.whatwg.org/multipage/">HTML Standard</a>. Living Standard. URL: <a href="https://html.spec.whatwg.org/multipage/">https://html.spec.whatwg.org/multipage/</a>
   <dt id="biblio-rfc2119">[RFC2119]
   <dd>S. Bradner. <a href="https://tools.ietf.org/html/rfc2119">Key words for use in RFCs to Indicate Requirement Levels</a>. March 1997. Best Current Practice. URL: <a href="https://tools.ietf.org/html/rfc2119">https://tools.ietf.org/html/rfc2119</a>
   <dt id="biblio-ssml">[SSML]
   <dd>Daniel Burnett; Zhi Wei Shuang. <a href="https://www.w3.org/TR/speech-synthesis11/">Speech Synthesis Markup Language (SSML) Version 1.1</a>. 7 September 2010. REC. URL: <a href="https://www.w3.org/TR/speech-synthesis11/">https://www.w3.org/TR/speech-synthesis11/</a>
   <dt id="biblio-webidl">[WebIDL]
   <dd>Boris Zbarsky. <a href="https://heycam.github.io/webidl/">Web IDL</a>. 15 December 2016. ED. URL: <a href="https://heycam.github.io/webidl/">https://heycam.github.io/webidl/</a>
  </dl>
  <h3 class="no-num no-ref heading settled" id="informative"><span class="content">Informative References</span><a class="self-link" href="#informative"></a></h3>
  <dl>
   <dt id="biblio-htmlspeech">[HTMLSPEECH]
   <dd>Michael Bodell; et al. <a href="https://www.w3.org/2005/Incubator/htmlspeech/XGR-htmlspeech-20111206/">HTML Speech Incubator Group Final Report</a>. URL: <a href="https://www.w3.org/2005/Incubator/htmlspeech/XGR-htmlspeech-20111206/">https://www.w3.org/2005/Incubator/htmlspeech/XGR-htmlspeech-20111206/</a>
  </dl>
  <h2 class="no-num no-ref heading settled" id="idl-index"><span class="content">IDL Index</span><a class="self-link" href="#idl-index"></a></h2>
<pre class="idl highlight def">[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed①③"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <a href="#speechrecognition"><code><c- g>SpeechRecognition</c-></code></a> : <a class="n" data-link-type="idl-name" href="https://dom.spec.whatwg.org/#eventtarget" id="ref-for-eventtarget③"><c- n>EventTarget</c-></a> {
    <a href="#dom-speechrecognition-speechrecognition"><code><c- g>constructor</c-></code></a>();

    // recognition parameters
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="#speechgrammarlist" id="ref-for-speechgrammarlist②"><c- n>SpeechGrammarList</c-></a> <a class="idl-code" data-link-type="attribute" data-type="SpeechGrammarList" href="#dom-speechrecognition-grammars" id="ref-for-dom-speechrecognition-grammars①"><c- g>grammars</c-></a>;
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString③⓪"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-type="DOMString" href="#dom-speechrecognition-lang" id="ref-for-dom-speechrecognition-lang①"><c- g>lang</c-></a>;
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean①⑦"><c- b>boolean</c-></a> <a class="idl-code" data-link-type="attribute" data-type="boolean" href="#dom-speechrecognition-continuous" id="ref-for-dom-speechrecognition-continuous①"><c- g>continuous</c-></a>;
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean①⑥"><c- b>boolean</c-></a> <a class="idl-code" data-link-type="attribute" data-type="boolean" href="#dom-speechrecognition-interimresults" id="ref-for-dom-speechrecognition-interimresults①"><c- g>interimResults</c-></a>;
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long②⓪"><c- b>unsigned</c-> <c- b>long</c-></a> <a class="idl-code" data-link-type="attribute" data-type="unsigned long" href="#dom-speechrecognition-maxalternatives" id="ref-for-dom-speechrecognition-maxalternatives①"><c- g>maxAlternatives</c-></a>;

    // methods to drive the speech interaction
    <c- b>void</c-> <a class="idl-code" data-link-type="method" href="#dom-speechrecognition-start" id="ref-for-dom-speechrecognition-start①"><c- g>start</c-></a>();
    <c- b>void</c-> <a class="idl-code" data-link-type="method" href="#dom-speechrecognition-stop" id="ref-for-dom-speechrecognition-stop①"><c- g>stop</c-></a>();
    <c- b>void</c-> <a class="idl-code" data-link-type="method" href="#dom-speechrecognition-abort" id="ref-for-dom-speechrecognition-abort①"><c- g>abort</c-></a>();

    // event methods
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler②⓪"><c- n>EventHandler</c-></a> <a data-type="EventHandler" href="#dom-speechrecognition-onaudiostart"><code><c- g>onaudiostart</c-></code></a>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①⑨"><c- n>EventHandler</c-></a> <a data-type="EventHandler" href="#dom-speechrecognition-onsoundstart"><code><c- g>onsoundstart</c-></code></a>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler②①"><c- n>EventHandler</c-></a> <a data-type="EventHandler" href="#dom-speechrecognition-onspeechstart"><code><c- g>onspeechstart</c-></code></a>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler③①"><c- n>EventHandler</c-></a> <a data-type="EventHandler" href="#dom-speechrecognition-onspeechend"><code><c- g>onspeechend</c-></code></a>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler④①"><c- n>EventHandler</c-></a> <a data-type="EventHandler" href="#dom-speechrecognition-onsoundend"><code><c- g>onsoundend</c-></code></a>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler⑤①"><c- n>EventHandler</c-></a> <a data-type="EventHandler" href="#dom-speechrecognition-onaudioend"><code><c- g>onaudioend</c-></code></a>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler⑥①"><c- n>EventHandler</c-></a> <a data-type="EventHandler" href="#dom-speechrecognition-onresult"><code><c- g>onresult</c-></code></a>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler⑦①"><c- n>EventHandler</c-></a> <a data-type="EventHandler" href="#dom-speechrecognition-onnomatch"><code><c- g>onnomatch</c-></code></a>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler⑧①"><c- n>EventHandler</c-></a> <a data-type="EventHandler" href="#dom-speechrecognition-onerror"><code><c- g>onerror</c-></code></a>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler⑨①"><c- n>EventHandler</c-></a> <a data-type="EventHandler" href="#dom-speechrecognition-onstart"><code><c- g>onstart</c-></code></a>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①⓪①"><c- n>EventHandler</c-></a> <a data-type="EventHandler" href="#dom-speechrecognition-onend"><code><c- g>onend</c-></code></a>;
};

<c- b>enum</c-> <a href="#enumdef-speechrecognitionerrorcode"><code><c- g>SpeechRecognitionErrorCode</c-></code></a> {
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechrecognitionerrorcode-no-speech" id="ref-for-dom-speechrecognitionerrorcode-no-speech①"><c- s>"no-speech"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechrecognitionerrorcode-aborted" id="ref-for-dom-speechrecognitionerrorcode-aborted①"><c- s>"aborted"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechrecognitionerrorcode-audio-capture" id="ref-for-dom-speechrecognitionerrorcode-audio-capture①"><c- s>"audio-capture"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechrecognitionerrorcode-network" id="ref-for-dom-speechrecognitionerrorcode-network①"><c- s>"network"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechrecognitionerrorcode-not-allowed" id="ref-for-dom-speechrecognitionerrorcode-not-allowed①"><c- s>"not-allowed"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechrecognitionerrorcode-service-not-allowed" id="ref-for-dom-speechrecognitionerrorcode-service-not-allowed①"><c- s>"service-not-allowed"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechrecognitionerrorcode-bad-grammar" id="ref-for-dom-speechrecognitionerrorcode-bad-grammar①"><c- s>"bad-grammar"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechrecognitionerrorcode-language-not-supported" id="ref-for-dom-speechrecognitionerrorcode-language-not-supported①"><c- s>"language-not-supported"</c-></a>
};

[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed①④"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <a href="#speechrecognitionerrorevent"><code><c- g>SpeechRecognitionErrorEvent</c-></code></a> : <a class="n" data-link-type="idl-name" href="https://dom.spec.whatwg.org/#event" id="ref-for-event③"><c- n>Event</c-></a> {
    <a href="#dom-speechrecognitionerrorevent-speechrecognitionerrorevent"><code><c- g>constructor</c-></code></a>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①①⓪"><c- b>DOMString</c-></a> <a href="#dom-speechrecognitionerrorevent-speechrecognitionerrorevent-type-eventinitdict-type"><code><c- g>type</c-></code></a>, <a class="n" data-link-type="idl-name" href="#dictdef-speechrecognitionerroreventinit" id="ref-for-dictdef-speechrecognitionerroreventinit①"><c- n>SpeechRecognitionErrorEventInit</c-></a> <a href="#dom-speechrecognitionerrorevent-speechrecognitionerrorevent-type-eventinitdict-eventinitdict"><code><c- g>eventInitDict</c-></code></a>);
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="#enumdef-speechrecognitionerrorcode" id="ref-for-enumdef-speechrecognitionerrorcode③"><c- n>SpeechRecognitionErrorCode</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="SpeechRecognitionErrorCode" href="#dom-speechrecognitionerrorevent-error" id="ref-for-dom-speechrecognitionerrorevent-error①"><c- g>error</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString②⑨"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="DOMString" href="#dom-speechrecognitionerrorevent-message" id="ref-for-dom-speechrecognitionerrorevent-message①"><c- g>message</c-></a>;
};

<c- b>dictionary</c-> <a href="#dictdef-speechrecognitionerroreventinit"><code><c- g>SpeechRecognitionErrorEventInit</c-></code></a> : <a class="n" data-link-type="idl-name" href="https://dom.spec.whatwg.org/#dictdef-eventinit" id="ref-for-dictdef-eventinit③"><c- n>EventInit</c-></a> {
    <c- b>required</c-> <a class="n" data-link-type="idl-name" href="#enumdef-speechrecognitionerrorcode" id="ref-for-enumdef-speechrecognitionerrorcode①①"><c- n>SpeechRecognitionErrorCode</c-></a> <a data-type="SpeechRecognitionErrorCode " href="#dom-speechrecognitionerroreventinit-error"><code><c- g>error</c-></code></a>;
    <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString③①"><c- b>DOMString</c-></a> <a data-default="&quot;&quot;" data-type="DOMString " href="#dom-speechrecognitionerroreventinit-message"><code><c- g>message</c-></code></a> = "";
};

// Item in N-best list
[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed②①"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <a href="#speechrecognitionalternative"><code><c- g>SpeechRecognitionAlternative</c-></code></a> {
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString④①"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="DOMString" href="#dom-speechrecognitionalternative-transcript" id="ref-for-dom-speechrecognitionalternative-transcript①"><c- g>transcript</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float①⑥"><c- b>float</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="float" href="#dom-speechrecognitionalternative-confidence" id="ref-for-dom-speechrecognitionalternative-confidence①"><c- g>confidence</c-></a>;
};

// A complete one-shot simple response
[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed③①"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <a href="#speechrecognitionresult"><code><c- g>SpeechRecognitionResult</c-></code></a> {
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long①①⓪"><c- b>unsigned</c-> <c- b>long</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="unsigned long" href="#dom-speechrecognitionresult-length" id="ref-for-dom-speechrecognitionresult-length①"><c- g>length</c-></a>;
    <c- b>getter</c-> <a class="n" data-link-type="idl-name" href="#speechrecognitionalternative" id="ref-for-speechrecognitionalternative②"><c- n>SpeechRecognitionAlternative</c-></a> <a class="idl-code" data-link-type="method" href="#dom-speechrecognitionresult-item" id="ref-for-dom-speechrecognitionresult-item①"><c- g>item</c-></a>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long②①"><c- b>unsigned</c-> <c- b>long</c-></a> <a href="#dom-speechrecognitionresult-item-index-index"><code><c- g>index</c-></code></a>);
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean②①"><c- b>boolean</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="boolean" href="#dom-speechrecognitionresult-isfinal" id="ref-for-dom-speechrecognitionresult-isfinal①"><c- g>isFinal</c-></a>;
};

// A collection of responses (used in continuous mode)
[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed④①"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <a href="#speechrecognitionresultlist"><code><c- g>SpeechRecognitionResultList</c-></code></a> {
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long③①"><c- b>unsigned</c-> <c- b>long</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="unsigned long" href="#dom-speechrecognitionresultlist-length" id="ref-for-dom-speechrecognitionresultlist-length①"><c- g>length</c-></a>;
    <c- b>getter</c-> <a class="n" data-link-type="idl-name" href="#speechrecognitionresult" id="ref-for-speechrecognitionresult①"><c- n>SpeechRecognitionResult</c-></a> <a class="idl-code" data-link-type="method" href="#dom-speechrecognitionresultlist-item" id="ref-for-dom-speechrecognitionresultlist-item①"><c- g>item</c-></a>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long④①"><c- b>unsigned</c-> <c- b>long</c-></a> <a href="#dom-speechrecognitionresultlist-item-index-index"><code><c- g>index</c-></code></a>);
};

// A full response, which could be interim or final, part of a continuous response or not
[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed⑤①"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <a href="#speechrecognitionevent"><code><c- g>SpeechRecognitionEvent</c-></code></a> : <a class="n" data-link-type="idl-name" href="https://dom.spec.whatwg.org/#event" id="ref-for-event①①"><c- n>Event</c-></a> {
    <a href="#dom-speechrecognitionevent-speechrecognitionevent"><code><c- g>constructor</c-></code></a>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString⑤①"><c- b>DOMString</c-></a> <a href="#dom-speechrecognitionevent-speechrecognitionevent-type-eventinitdict-type"><code><c- g>type</c-></code></a>, <a class="n" data-link-type="idl-name" href="#dictdef-speechrecognitioneventinit" id="ref-for-dictdef-speechrecognitioneventinit①"><c- n>SpeechRecognitionEventInit</c-></a> <a href="#dom-speechrecognitionevent-speechrecognitionevent-type-eventinitdict-eventinitdict"><code><c- g>eventInitDict</c-></code></a>);
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long⑤①"><c- b>unsigned</c-> <c- b>long</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="unsigned long" href="#dom-speechrecognitionevent-resultindex" id="ref-for-dom-speechrecognitionevent-resultindex①"><c- g>resultIndex</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="#speechrecognitionresultlist" id="ref-for-speechrecognitionresultlist③"><c- n>SpeechRecognitionResultList</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="SpeechRecognitionResultList" href="#dom-speechrecognitionevent-results" id="ref-for-dom-speechrecognitionevent-results②"><c- g>results</c-></a>;
};

<c- b>dictionary</c-> <a href="#dictdef-speechrecognitioneventinit"><code><c- g>SpeechRecognitionEventInit</c-></code></a> : <a class="n" data-link-type="idl-name" href="https://dom.spec.whatwg.org/#dictdef-eventinit" id="ref-for-dictdef-eventinit①①"><c- n>EventInit</c-></a> {
    <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long⑥①"><c- b>unsigned</c-> <c- b>long</c-></a> <a data-default="0" data-type="unsigned long " href="#dom-speechrecognitioneventinit-resultindex"><code><c- g>resultIndex</c-></code></a> = 0;
    <c- b>required</c-> <a class="n" data-link-type="idl-name" href="#speechrecognitionresultlist" id="ref-for-speechrecognitionresultlist①①"><c- n>SpeechRecognitionResultList</c-></a> <a data-type="SpeechRecognitionResultList " href="#dom-speechrecognitioneventinit-results"><code><c- g>results</c-></code></a>;
};

// The object representing a speech grammar
[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed⑥①"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <a href="#speechgrammar"><code><c- g>SpeechGrammar</c-></code></a> {
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString⑥①"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-type="DOMString" href="#dom-speechgrammar-src" id="ref-for-dom-speechgrammar-src①"><c- g>src</c-></a>;
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float①⑤"><c- b>float</c-></a> <a class="idl-code" data-link-type="attribute" data-type="float" href="#dom-speechgrammar-weight" id="ref-for-dom-speechgrammar-weight①"><c- g>weight</c-></a>;
};

// The object representing a speech grammar collection
[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed⑦①"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <a href="#speechgrammarlist"><code><c- g>SpeechGrammarList</c-></code></a> {
    <a href="#dom-speechgrammarlist-speechgrammarlist"><code><c- g>constructor</c-></code></a>();
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long⑦①"><c- b>unsigned</c-> <c- b>long</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="unsigned long" href="#dom-speechgrammarlist-length" id="ref-for-dom-speechgrammarlist-length①"><c- g>length</c-></a>;
    <c- b>getter</c-> <a class="n" data-link-type="idl-name" href="#speechgrammar" id="ref-for-speechgrammar①"><c- n>SpeechGrammar</c-></a> <a class="idl-code" data-link-type="method" href="#dom-speechgrammarlist-item" id="ref-for-dom-speechgrammarlist-item①"><c- g>item</c-></a>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long⑧①"><c- b>unsigned</c-> <c- b>long</c-></a> <a href="#dom-speechgrammarlist-item-index-index"><code><c- g>index</c-></code></a>);
    <c- b>void</c-> <a class="idl-code" data-link-type="method" href="#dom-speechgrammarlist-addfromuri" id="ref-for-dom-speechgrammarlist-addfromuri①"><c- g>addFromURI</c-></a>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString⑦①"><c- b>DOMString</c-></a> <a href="#dom-speechgrammarlist-addfromuri-src-weight-src"><code><c- g>src</c-></code></a>,
                    <c- b>optional</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float②①"><c- b>float</c-></a> <a href="#dom-speechgrammarlist-addfromuri-src-weight-weight"><code><c- g>weight</c-></code></a> = 1.0);
    <c- b>void</c-> <a class="idl-code" data-link-type="method" href="#dom-speechgrammarlist-addfromstring" id="ref-for-dom-speechgrammarlist-addfromstring①"><c- g>addFromString</c-></a>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString⑧①"><c- b>DOMString</c-></a> <a href="#dom-speechgrammarlist-addfromstring-string-weight-string"><code><c- g>string</c-></code></a>,
                    <c- b>optional</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float③①"><c- b>float</c-></a> <a href="#dom-speechgrammarlist-addfromstring-string-weight-weight"><code><c- g>weight</c-></code></a> = 1.0);
};

[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed⑧①"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <a href="#speechsynthesis"><code><c- g>SpeechSynthesis</c-></code></a> : <a class="n" data-link-type="idl-name" href="https://dom.spec.whatwg.org/#eventtarget" id="ref-for-eventtarget①①"><c- n>EventTarget</c-></a> {
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean⑥①"><c- b>boolean</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="boolean" href="#dom-speechsynthesis-pending" id="ref-for-dom-speechsynthesis-pending①"><c- g>pending</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean⑦①"><c- b>boolean</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="boolean" href="#dom-speechsynthesis-speaking" id="ref-for-dom-speechsynthesis-speaking①"><c- g>speaking</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean⑧①"><c- b>boolean</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="boolean" href="#dom-speechsynthesis-paused" id="ref-for-dom-speechsynthesis-paused①"><c- g>paused</c-></a>;

    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①①①"><c- n>EventHandler</c-></a> <a data-type="EventHandler" href="#dom-speechsynthesis-onvoiceschanged"><code><c- g>onvoiceschanged</c-></code></a>;

    <c- b>void</c-> <a class="idl-code" data-link-type="method" href="#dom-speechsynthesis-speak" id="ref-for-dom-speechsynthesis-speak③"><c- g>speak</c-></a>(<a class="n" data-link-type="idl-name" href="#speechsynthesisutterance" id="ref-for-speechsynthesisutterance⑤"><c- n>SpeechSynthesisUtterance</c-></a> <a href="#dom-speechsynthesis-speak-utterance-utterance"><code><c- g>utterance</c-></code></a>);
    <c- b>void</c-> <a class="idl-code" data-link-type="method" href="#dom-speechsynthesis-cancel" id="ref-for-dom-speechsynthesis-cancel①"><c- g>cancel</c-></a>();
    <c- b>void</c-> <a class="idl-code" data-link-type="method" href="#dom-speechsynthesis-pause" id="ref-for-dom-speechsynthesis-pause①"><c- g>pause</c-></a>();
    <c- b>void</c-> <a class="idl-code" data-link-type="method" href="#dom-speechsynthesis-resume" id="ref-for-dom-speechsynthesis-resume①"><c- g>resume</c-></a>();
    <c- b>sequence</c->&lt;<a class="n" data-link-type="idl-name" href="#speechsynthesisvoice" id="ref-for-speechsynthesisvoice④"><c- n>SpeechSynthesisVoice</c-></a>> <a class="idl-code" data-link-type="method" href="#dom-speechsynthesis-getvoices" id="ref-for-dom-speechsynthesis-getvoices②"><c- g>getVoices</c-></a>();
};

<c- b>partial</c-> <c- b>interface</c-> <a class="idl-code" data-link-type="interface" href="https://html.spec.whatwg.org/multipage/window-object.html#window" id="ref-for-window①"><c- g>Window</c-></a> {
    [<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#SameObject" id="ref-for-SameObject①"><c- g>SameObject</c-></a>] <c- b>readonly</c-> <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="#speechsynthesis" id="ref-for-speechsynthesis①"><c- n>SpeechSynthesis</c-></a> <a data-readonly data-type="SpeechSynthesis" href="#dom-window-speechsynthesis"><code><c- g>speechSynthesis</c-></code></a>;
};

[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed⑨①"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <a href="#speechsynthesisutterance"><code><c- g>SpeechSynthesisUtterance</c-></code></a> : <a class="n" data-link-type="idl-name" href="https://dom.spec.whatwg.org/#eventtarget" id="ref-for-eventtarget②①"><c- n>EventTarget</c-></a> {
    <a href="#dom-speechsynthesisutterance-speechsynthesisutterance"><code><c- g>constructor</c-></code></a>(<c- b>optional</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①③①"><c- b>DOMString</c-></a> <a href="#dom-speechsynthesisutterance-speechsynthesisutterance-text-text"><code><c- g>text</c-></code></a>);

    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①④①"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-type="DOMString" href="#dom-speechsynthesisutterance-text" id="ref-for-dom-speechsynthesisutterance-text①"><c- g>text</c-></a>;
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①⑤①"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-type="DOMString" href="#dom-speechsynthesisutterance-lang" id="ref-for-dom-speechsynthesisutterance-lang②"><c- g>lang</c-></a>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="#speechsynthesisvoice" id="ref-for-speechsynthesisvoice①①"><c- n>SpeechSynthesisVoice</c-></a>? <a class="idl-code" data-link-type="attribute" data-type="SpeechSynthesisVoice?" href="#dom-speechsynthesisutterance-voice" id="ref-for-dom-speechsynthesisutterance-voice①"><c- g>voice</c-></a>;
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float⑥①"><c- b>float</c-></a> <a class="idl-code" data-link-type="attribute" data-type="float" href="#dom-speechsynthesisutterance-volume" id="ref-for-dom-speechsynthesisutterance-volume①"><c- g>volume</c-></a>;
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float⑦①"><c- b>float</c-></a> <a class="idl-code" data-link-type="attribute" data-type="float" href="#dom-speechsynthesisutterance-rate" id="ref-for-dom-speechsynthesisutterance-rate①"><c- g>rate</c-></a>;
    <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float⑧①"><c- b>float</c-></a> <a class="idl-code" data-link-type="attribute" data-type="float" href="#dom-speechsynthesisutterance-pitch" id="ref-for-dom-speechsynthesisutterance-pitch①"><c- g>pitch</c-></a>;

    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①②①"><c- n>EventHandler</c-></a> <a data-type="EventHandler" href="#dom-speechsynthesisutterance-onstart"><code><c- g>onstart</c-></code></a>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①③①"><c- n>EventHandler</c-></a> <a data-type="EventHandler" href="#dom-speechsynthesisutterance-onend"><code><c- g>onend</c-></code></a>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①④①"><c- n>EventHandler</c-></a> <a data-type="EventHandler" href="#dom-speechsynthesisutterance-onerror"><code><c- g>onerror</c-></code></a>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①⑤①"><c- n>EventHandler</c-></a> <a data-type="EventHandler" href="#dom-speechsynthesisutterance-onpause"><code><c- g>onpause</c-></code></a>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①⑥①"><c- n>EventHandler</c-></a> <a data-type="EventHandler" href="#dom-speechsynthesisutterance-onresume"><code><c- g>onresume</c-></code></a>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①⑦①"><c- n>EventHandler</c-></a> <a data-type="EventHandler" href="#dom-speechsynthesisutterance-onmark"><code><c- g>onmark</c-></code></a>;
    <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler" id="ref-for-eventhandler①⑧①"><c- n>EventHandler</c-></a> <a data-type="EventHandler" href="#dom-speechsynthesisutterance-onboundary"><code><c- g>onboundary</c-></code></a>;
};

[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed①⓪①"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <a href="#speechsynthesisevent"><code><c- g>SpeechSynthesisEvent</c-></code></a> : <a class="n" data-link-type="idl-name" href="https://dom.spec.whatwg.org/#event" id="ref-for-event②①"><c- n>Event</c-></a> {
    <a href="#dom-speechsynthesisevent-speechsynthesisevent"><code><c- g>constructor</c-></code></a>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①⑥①"><c- b>DOMString</c-></a> <a href="#dom-speechsynthesisevent-speechsynthesisevent-type-eventinitdict-type"><code><c- g>type</c-></code></a>, <a class="n" data-link-type="idl-name" href="#dictdef-speechsynthesiseventinit" id="ref-for-dictdef-speechsynthesiseventinit②"><c- n>SpeechSynthesisEventInit</c-></a> <a href="#dom-speechsynthesisevent-speechsynthesisevent-type-eventinitdict-eventinitdict"><code><c- g>eventInitDict</c-></code></a>);
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="#speechsynthesisutterance" id="ref-for-speechsynthesisutterance①①"><c- n>SpeechSynthesisUtterance</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="SpeechSynthesisUtterance" href="#dom-speechsynthesisevent-utterance" id="ref-for-dom-speechsynthesisevent-utterance①"><c- g>utterance</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long①④①"><c- b>unsigned</c-> <c- b>long</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="unsigned long" href="#dom-speechsynthesisevent-charindex" id="ref-for-dom-speechsynthesisevent-charindex②"><c- g>charIndex</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long①⑤①"><c- b>unsigned</c-> <c- b>long</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="unsigned long" href="#dom-speechsynthesisevent-charlength" id="ref-for-dom-speechsynthesisevent-charlength①"><c- g>charLength</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float⑨①"><c- b>float</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="float" href="#dom-speechsynthesisevent-elapsedtime" id="ref-for-dom-speechsynthesisevent-elapsedtime①"><c- g>elapsedTime</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①⑦①"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="DOMString" href="#dom-speechsynthesisevent-name" id="ref-for-dom-speechsynthesisevent-name①"><c- g>name</c-></a>;
};

<c- b>dictionary</c-> <a href="#dictdef-speechsynthesiseventinit"><code><c- g>SpeechSynthesisEventInit</c-></code></a> : <a class="n" data-link-type="idl-name" href="https://dom.spec.whatwg.org/#dictdef-eventinit" id="ref-for-dictdef-eventinit②①"><c- n>EventInit</c-></a> {
    <c- b>required</c-> <a class="n" data-link-type="idl-name" href="#speechsynthesisutterance" id="ref-for-speechsynthesisutterance②①"><c- n>SpeechSynthesisUtterance</c-></a> <a data-type="SpeechSynthesisUtterance " href="#dom-speechsynthesiseventinit-utterance"><code><c- g>utterance</c-></code></a>;
    <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long①⑥①"><c- b>unsigned</c-> <c- b>long</c-></a> <a data-default="0" data-type="unsigned long " href="#dom-speechsynthesiseventinit-charindex"><code><c- g>charIndex</c-></code></a> = 0;
    <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-unsigned-long" id="ref-for-idl-unsigned-long①⑦①"><c- b>unsigned</c-> <c- b>long</c-></a> <a data-default="0" data-type="unsigned long " href="#dom-speechsynthesiseventinit-charlength"><code><c- g>charLength</c-></code></a> = 0;
    <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-float" id="ref-for-idl-float①⓪①"><c- b>float</c-></a> <a data-default="0" data-type="float " href="#dom-speechsynthesiseventinit-elapsedtime"><code><c- g>elapsedTime</c-></code></a> = 0;
    <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①⑧①"><c- b>DOMString</c-></a> <a data-default="&quot;&quot;" data-type="DOMString " href="#dom-speechsynthesiseventinit-name"><code><c- g>name</c-></code></a> = "";
};

<c- b>enum</c-> <a href="#enumdef-speechsynthesiserrorcode"><code><c- g>SpeechSynthesisErrorCode</c-></code></a> {
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-canceled" id="ref-for-dom-speechsynthesiserrorcode-canceled①"><c- s>"canceled"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-interrupted" id="ref-for-dom-speechsynthesiserrorcode-interrupted①"><c- s>"interrupted"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-audio-busy" id="ref-for-dom-speechsynthesiserrorcode-audio-busy①"><c- s>"audio-busy"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-audio-hardware" id="ref-for-dom-speechsynthesiserrorcode-audio-hardware①"><c- s>"audio-hardware"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-network" id="ref-for-dom-speechsynthesiserrorcode-network①"><c- s>"network"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-synthesis-unavailable" id="ref-for-dom-speechsynthesiserrorcode-synthesis-unavailable①"><c- s>"synthesis-unavailable"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-synthesis-failed" id="ref-for-dom-speechsynthesiserrorcode-synthesis-failed①"><c- s>"synthesis-failed"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-language-unavailable" id="ref-for-dom-speechsynthesiserrorcode-language-unavailable①"><c- s>"language-unavailable"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-voice-unavailable" id="ref-for-dom-speechsynthesiserrorcode-voice-unavailable①"><c- s>"voice-unavailable"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-text-too-long" id="ref-for-dom-speechsynthesiserrorcode-text-too-long①"><c- s>"text-too-long"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-invalid-argument" id="ref-for-dom-speechsynthesiserrorcode-invalid-argument①"><c- s>"invalid-argument"</c-></a>,
    <a class="idl-code" data-link-type="enum-value" href="#dom-speechsynthesiserrorcode-not-allowed" id="ref-for-dom-speechsynthesiserrorcode-not-allowed①"><c- s>"not-allowed"</c-></a>,
};

[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed①①①"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <a href="#speechsynthesiserrorevent"><code><c- g>SpeechSynthesisErrorEvent</c-></code></a> : <a class="n" data-link-type="idl-name" href="#speechsynthesisevent" id="ref-for-speechsynthesisevent②"><c- n>SpeechSynthesisEvent</c-></a> {
    <a href="#dom-speechsynthesiserrorevent-speechsynthesiserrorevent"><code><c- g>constructor</c-></code></a>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①⑨①"><c- b>DOMString</c-></a> <a href="#dom-speechsynthesiserrorevent-speechsynthesiserrorevent-type-eventinitdict-type"><code><c- g>type</c-></code></a>, <a class="n" data-link-type="idl-name" href="#dictdef-speechsynthesiserroreventinit" id="ref-for-dictdef-speechsynthesiserroreventinit①"><c- n>SpeechSynthesisErrorEventInit</c-></a> <a href="#dom-speechsynthesiserrorevent-speechsynthesiserrorevent-type-eventinitdict-eventinitdict"><code><c- g>eventInitDict</c-></code></a>);
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="n" data-link-type="idl-name" href="#enumdef-speechsynthesiserrorcode" id="ref-for-enumdef-speechsynthesiserrorcode③"><c- n>SpeechSynthesisErrorCode</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="SpeechSynthesisErrorCode" href="#dom-speechsynthesiserrorevent-error" id="ref-for-dom-speechsynthesiserrorevent-error①"><c- g>error</c-></a>;
};

<c- b>dictionary</c-> <a href="#dictdef-speechsynthesiserroreventinit"><code><c- g>SpeechSynthesisErrorEventInit</c-></code></a> : <a class="n" data-link-type="idl-name" href="#dictdef-speechsynthesiseventinit" id="ref-for-dictdef-speechsynthesiseventinit①①"><c- n>SpeechSynthesisEventInit</c-></a> {
    <c- b>required</c-> <a class="n" data-link-type="idl-name" href="#enumdef-speechsynthesiserrorcode" id="ref-for-enumdef-speechsynthesiserrorcode①①"><c- n>SpeechSynthesisErrorCode</c-></a> <a data-type="SpeechSynthesisErrorCode " href="#dom-speechsynthesiserroreventinit-error"><code><c- g>error</c-></code></a>;
};

[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Exposed" id="ref-for-Exposed①②①"><c- g>Exposed</c-></a>=<c- n>Window</c->]
<c- b>interface</c-> <a href="#speechsynthesisvoice"><code><c- g>SpeechSynthesisVoice</c-></code></a> {
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString②⓪①"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="DOMString" href="#dom-speechsynthesisvoice-voiceuri" id="ref-for-dom-speechsynthesisvoice-voiceuri①"><c- g>voiceURI</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString②①①"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="DOMString" href="#dom-speechsynthesisvoice-name" id="ref-for-dom-speechsynthesisvoice-name①"><c- g>name</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString②②①"><c- b>DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="DOMString" href="#dom-speechsynthesisvoice-lang" id="ref-for-dom-speechsynthesisvoice-lang①"><c- g>lang</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean⑨①"><c- b>boolean</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="boolean" href="#dom-speechsynthesisvoice-localservice" id="ref-for-dom-speechsynthesisvoice-localservice①"><c- g>localService</c-></a>;
    <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-boolean" id="ref-for-idl-boolean①⓪①"><c- b>boolean</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly data-type="boolean" href="#dom-speechsynthesisvoice-default" id="ref-for-dom-speechsynthesisvoice-default①"><c- g>default</c-></a>;
};

</pre>
  <h2 class="no-num no-ref heading settled" id="issues-index"><span class="content">Issues Index</span><a class="self-link" href="#issues-index"></a></h2>
  <div style="counter-reset:issue">
   <div class="issue">The group has discussed whether WebRTC might be used to specify selection of audio sources and remote recognizers.
See <a href="https://lists.w3.org/Archives/Public/public-speech-api/2012Sep/0072.html">Interacting with WebRTC, the Web Audio API and other external sources</a> thread on public-speech-api@w3.org.<a href="#issue-2c77f5e1"> ↵ </a></div>
   <div class="issue">The group has discussed whether confidence can be specified in a speech-recognition-engine-independent manner and whether confidence threshold and nomatch should be included, because this is not a dialog API.
  See <a href="https://lists.w3.org/Archives/Public/public-speech-api/2012Jun/0143.html">Confidence property</a> thread on public-speech-api@w3.org.<a href="#issue-1fc473cc"> ↵ </a></div>
   <div class="issue">The group has discussed options for which grammar formats should be supported, how builtin grammar types are specified, and default grammars when not specified.
See <a href="https://lists.w3.org/Archives/Public/public-speech-api/2012Jun/0179.html">Default value of SpeechRecognition.grammars</a> thread on public-speech-api@w3.org.<a href="#issue-29f5066f"> ↵ </a></div>
  </div>
  <aside class="dfn-panel" data-for="enumdef-speechrecognitionerrorcode">
   <b><a href="#enumdef-speechrecognitionerrorcode">#enumdef-speechrecognitionerrorcode</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-enumdef-speechrecognitionerrorcode">4.1. The SpeechRecognition Interface</a> <a href="#ref-for-enumdef-speechrecognitionerrorcode①">(2)</a>
    <li><a href="#ref-for-enumdef-speechrecognitionerrorcode②">4.1.4. SpeechRecognitionErrorEvent</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="speechrecognitionerrorevent">
   <b><a href="#speechrecognitionerrorevent">#speechrecognitionerrorevent</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-speechrecognitionerrorevent">4.1.3. SpeechRecognition Events</a>
    <li><a href="#ref-for-speechrecognitionerrorevent①">4.1.4. SpeechRecognitionErrorEvent</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dictdef-speechrecognitionerroreventinit">
   <b><a href="#dictdef-speechrecognitionerroreventinit">#dictdef-speechrecognitionerroreventinit</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dictdef-speechrecognitionerroreventinit">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="speechrecognitionalternative">
   <b><a href="#speechrecognitionalternative">#speechrecognitionalternative</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-speechrecognitionalternative">4.1. The SpeechRecognition Interface</a>
    <li><a href="#ref-for-speechrecognitionalternative①">4.1.1. SpeechRecognition Attributes</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="speechrecognitionresult">
   <b><a href="#speechrecognitionresult">#speechrecognitionresult</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-speechrecognitionresult">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="speechrecognitionresultlist">
   <b><a href="#speechrecognitionresultlist">#speechrecognitionresultlist</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-speechrecognitionresultlist">4.1. The SpeechRecognition Interface</a> <a href="#ref-for-speechrecognitionresultlist①">(2)</a>
    <li><a href="#ref-for-speechrecognitionresultlist②">4.1.8. SpeechRecognitionEvent</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="speechrecognitionevent">
   <b><a href="#speechrecognitionevent">#speechrecognitionevent</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-speechrecognitionevent">4.1.3. SpeechRecognition Events</a> <a href="#ref-for-speechrecognitionevent①">(2)</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dictdef-speechrecognitioneventinit">
   <b><a href="#dictdef-speechrecognitioneventinit">#dictdef-speechrecognitioneventinit</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dictdef-speechrecognitioneventinit">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="speechgrammar">
   <b><a href="#speechgrammar">#speechgrammar</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-speechgrammar">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="speechgrammarlist">
   <b><a href="#speechgrammarlist">#speechgrammarlist</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-speechgrammarlist">4.1. The SpeechRecognition Interface</a>
    <li><a href="#ref-for-speechgrammarlist①">4.1.1. SpeechRecognition Attributes</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognition-grammars">
   <b><a href="#dom-speechrecognition-grammars">#dom-speechrecognition-grammars</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognition-grammars">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognition-lang">
   <b><a href="#dom-speechrecognition-lang">#dom-speechrecognition-lang</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognition-lang">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognition-continuous">
   <b><a href="#dom-speechrecognition-continuous">#dom-speechrecognition-continuous</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognition-continuous">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognition-interimresults">
   <b><a href="#dom-speechrecognition-interimresults">#dom-speechrecognition-interimresults</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognition-interimresults">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognition-maxalternatives">
   <b><a href="#dom-speechrecognition-maxalternatives">#dom-speechrecognition-maxalternatives</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognition-maxalternatives">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognition-start">
   <b><a href="#dom-speechrecognition-start">#dom-speechrecognition-start</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognition-start">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognition-stop">
   <b><a href="#dom-speechrecognition-stop">#dom-speechrecognition-stop</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognition-stop">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognition-abort">
   <b><a href="#dom-speechrecognition-abort">#dom-speechrecognition-abort</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognition-abort">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="eventdef-speechrecognition-audiostart">
   <b><a href="#eventdef-speechrecognition-audiostart">#eventdef-speechrecognition-audiostart</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eventdef-speechrecognition-audiostart">4.1.3. SpeechRecognition Events</a> <a href="#ref-for-eventdef-speechrecognition-audiostart①">(2)</a> <a href="#ref-for-eventdef-speechrecognition-audiostart②">(3)</a> <a href="#ref-for-eventdef-speechrecognition-audiostart③">(4)</a> <a href="#ref-for-eventdef-speechrecognition-audiostart④">(5)</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="eventdef-speechrecognition-soundstart">
   <b><a href="#eventdef-speechrecognition-soundstart">#eventdef-speechrecognition-soundstart</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eventdef-speechrecognition-soundstart">4.1.3. SpeechRecognition Events</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="eventdef-speechrecognition-speechstart">
   <b><a href="#eventdef-speechrecognition-speechstart">#eventdef-speechrecognition-speechstart</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eventdef-speechrecognition-speechstart">4.1.3. SpeechRecognition Events</a> <a href="#ref-for-eventdef-speechrecognition-speechstart①">(2)</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="eventdef-speechrecognition-speechend">
   <b><a href="#eventdef-speechrecognition-speechend">#eventdef-speechrecognition-speechend</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eventdef-speechrecognition-speechend">4.1.3. SpeechRecognition Events</a> <a href="#ref-for-eventdef-speechrecognition-speechend①">(2)</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="eventdef-speechrecognition-audioend">
   <b><a href="#eventdef-speechrecognition-audioend">#eventdef-speechrecognition-audioend</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eventdef-speechrecognition-audioend">4.1.3. SpeechRecognition Events</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="eventdef-speechrecognition-error">
   <b><a href="#eventdef-speechrecognition-error">#eventdef-speechrecognition-error</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eventdef-speechrecognition-error">4.1.2. SpeechRecognition Methods</a> <a href="#ref-for-eventdef-speechrecognition-error①">(2)</a> <a href="#ref-for-eventdef-speechrecognition-error②">(3)</a>
    <li><a href="#ref-for-eventdef-speechrecognition-error③">4.1.4. SpeechRecognitionErrorEvent</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="eventdef-speechrecognition-end">
   <b><a href="#eventdef-speechrecognition-end">#eventdef-speechrecognition-end</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eventdef-speechrecognition-end">4.1.2. SpeechRecognition Methods</a> <a href="#ref-for-eventdef-speechrecognition-end①">(2)</a> <a href="#ref-for-eventdef-speechrecognition-end②">(3)</a> <a href="#ref-for-eventdef-speechrecognition-end③">(4)</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognitionerrorevent-error">
   <b><a href="#dom-speechrecognitionerrorevent-error">#dom-speechrecognitionerrorevent-error</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognitionerrorevent-error">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognitionerrorcode-no-speech">
   <b><a href="#dom-speechrecognitionerrorcode-no-speech">#dom-speechrecognitionerrorcode-no-speech</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognitionerrorcode-no-speech">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognitionerrorcode-aborted">
   <b><a href="#dom-speechrecognitionerrorcode-aborted">#dom-speechrecognitionerrorcode-aborted</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognitionerrorcode-aborted">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognitionerrorcode-audio-capture">
   <b><a href="#dom-speechrecognitionerrorcode-audio-capture">#dom-speechrecognitionerrorcode-audio-capture</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognitionerrorcode-audio-capture">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognitionerrorcode-network">
   <b><a href="#dom-speechrecognitionerrorcode-network">#dom-speechrecognitionerrorcode-network</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognitionerrorcode-network">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognitionerrorcode-not-allowed">
   <b><a href="#dom-speechrecognitionerrorcode-not-allowed">#dom-speechrecognitionerrorcode-not-allowed</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognitionerrorcode-not-allowed">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognitionerrorcode-service-not-allowed">
   <b><a href="#dom-speechrecognitionerrorcode-service-not-allowed">#dom-speechrecognitionerrorcode-service-not-allowed</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognitionerrorcode-service-not-allowed">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognitionerrorcode-bad-grammar">
   <b><a href="#dom-speechrecognitionerrorcode-bad-grammar">#dom-speechrecognitionerrorcode-bad-grammar</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognitionerrorcode-bad-grammar">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognitionerrorcode-language-not-supported">
   <b><a href="#dom-speechrecognitionerrorcode-language-not-supported">#dom-speechrecognitionerrorcode-language-not-supported</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognitionerrorcode-language-not-supported">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognitionerrorevent-message">
   <b><a href="#dom-speechrecognitionerrorevent-message">#dom-speechrecognitionerrorevent-message</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognitionerrorevent-message">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognitionalternative-transcript">
   <b><a href="#dom-speechrecognitionalternative-transcript">#dom-speechrecognitionalternative-transcript</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognitionalternative-transcript">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognitionalternative-confidence">
   <b><a href="#dom-speechrecognitionalternative-confidence">#dom-speechrecognitionalternative-confidence</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognitionalternative-confidence">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognitionresult-length">
   <b><a href="#dom-speechrecognitionresult-length">#dom-speechrecognitionresult-length</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognitionresult-length">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognitionresult-item">
   <b><a href="#dom-speechrecognitionresult-item">#dom-speechrecognitionresult-item</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognitionresult-item">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognitionresult-isfinal">
   <b><a href="#dom-speechrecognitionresult-isfinal">#dom-speechrecognitionresult-isfinal</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognitionresult-isfinal">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognitionresultlist-length">
   <b><a href="#dom-speechrecognitionresultlist-length">#dom-speechrecognitionresultlist-length</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognitionresultlist-length">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognitionresultlist-item">
   <b><a href="#dom-speechrecognitionresultlist-item">#dom-speechrecognitionresultlist-item</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognitionresultlist-item">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognitionevent-resultindex">
   <b><a href="#dom-speechrecognitionevent-resultindex">#dom-speechrecognitionevent-resultindex</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognitionevent-resultindex">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechrecognitionevent-results">
   <b><a href="#dom-speechrecognitionevent-results">#dom-speechrecognitionevent-results</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechrecognitionevent-results">4.1. The SpeechRecognition Interface</a>
    <li><a href="#ref-for-dom-speechrecognitionevent-results①">4.1.3. SpeechRecognition Events</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechgrammar-src">
   <b><a href="#dom-speechgrammar-src">#dom-speechgrammar-src</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechgrammar-src">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechgrammar-weight">
   <b><a href="#dom-speechgrammar-weight">#dom-speechgrammar-weight</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechgrammar-weight">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechgrammarlist-length">
   <b><a href="#dom-speechgrammarlist-length">#dom-speechgrammarlist-length</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechgrammarlist-length">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechgrammarlist-item">
   <b><a href="#dom-speechgrammarlist-item">#dom-speechgrammarlist-item</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechgrammarlist-item">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechgrammarlist-addfromuri">
   <b><a href="#dom-speechgrammarlist-addfromuri">#dom-speechgrammarlist-addfromuri</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechgrammarlist-addfromuri">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechgrammarlist-addfromstring">
   <b><a href="#dom-speechgrammarlist-addfromstring">#dom-speechgrammarlist-addfromstring</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechgrammarlist-addfromstring">4.1. The SpeechRecognition Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="speechsynthesis">
   <b><a href="#speechsynthesis">#speechsynthesis</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-speechsynthesis">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="speechsynthesisutterance">
   <b><a href="#speechsynthesisutterance">#speechsynthesisutterance</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-speechsynthesisutterance">4.2. The SpeechSynthesis Interface</a> <a href="#ref-for-speechsynthesisutterance①">(2)</a> <a href="#ref-for-speechsynthesisutterance②">(3)</a>
    <li><a href="#ref-for-speechsynthesisutterance③">4.2.4. SpeechSynthesisUtterance Attributes</a>
    <li><a href="#ref-for-speechsynthesisutterance④">4.2.6. SpeechSynthesisEvent Attributes</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="speechsynthesisevent">
   <b><a href="#speechsynthesisevent">#speechsynthesisevent</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-speechsynthesisevent">4.2. The SpeechSynthesis Interface</a>
    <li><a href="#ref-for-speechsynthesisevent①">4.2.5. SpeechSynthesisUtterance Events</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dictdef-speechsynthesiseventinit">
   <b><a href="#dictdef-speechsynthesiseventinit">#dictdef-speechsynthesiseventinit</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dictdef-speechsynthesiseventinit">4.2. The SpeechSynthesis Interface</a> <a href="#ref-for-dictdef-speechsynthesiseventinit①">(2)</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="enumdef-speechsynthesiserrorcode">
   <b><a href="#enumdef-speechsynthesiserrorcode">#enumdef-speechsynthesiserrorcode</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-enumdef-speechsynthesiserrorcode">4.2. The SpeechSynthesis Interface</a> <a href="#ref-for-enumdef-speechsynthesiserrorcode①">(2)</a>
    <li><a href="#ref-for-enumdef-speechsynthesiserrorcode②">4.2.7. SpeechSynthesisErrorEvent Attributes</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="speechsynthesiserrorevent">
   <b><a href="#speechsynthesiserrorevent">#speechsynthesiserrorevent</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-speechsynthesiserrorevent">4.2.5. SpeechSynthesisUtterance Events</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dictdef-speechsynthesiserroreventinit">
   <b><a href="#dictdef-speechsynthesiserroreventinit">#dictdef-speechsynthesiserroreventinit</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dictdef-speechsynthesiserroreventinit">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="speechsynthesisvoice">
   <b><a href="#speechsynthesisvoice">#speechsynthesisvoice</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-speechsynthesisvoice">4.2. The SpeechSynthesis Interface</a> <a href="#ref-for-speechsynthesisvoice①">(2)</a>
    <li><a href="#ref-for-speechsynthesisvoice②">4.2.4. SpeechSynthesisUtterance Attributes</a> <a href="#ref-for-speechsynthesisvoice③">(2)</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesis-pending">
   <b><a href="#dom-speechsynthesis-pending">#dom-speechsynthesis-pending</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesis-pending">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesis-speaking">
   <b><a href="#dom-speechsynthesis-speaking">#dom-speechsynthesis-speaking</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesis-speaking">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesis-paused">
   <b><a href="#dom-speechsynthesis-paused">#dom-speechsynthesis-paused</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesis-paused">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesis-speak">
   <b><a href="#dom-speechsynthesis-speak">#dom-speechsynthesis-speak</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesis-speak">4.2. The SpeechSynthesis Interface</a>
    <li><a href="#ref-for-dom-speechsynthesis-speak①">4.2.4. SpeechSynthesisUtterance Attributes</a> <a href="#ref-for-dom-speechsynthesis-speak②">(2)</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesis-cancel">
   <b><a href="#dom-speechsynthesis-cancel">#dom-speechsynthesis-cancel</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesis-cancel">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesis-pause">
   <b><a href="#dom-speechsynthesis-pause">#dom-speechsynthesis-pause</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesis-pause">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesis-resume">
   <b><a href="#dom-speechsynthesis-resume">#dom-speechsynthesis-resume</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesis-resume">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesis-getvoices">
   <b><a href="#dom-speechsynthesis-getvoices">#dom-speechsynthesis-getvoices</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesis-getvoices">4.2. The SpeechSynthesis Interface</a>
    <li><a href="#ref-for-dom-speechsynthesis-getvoices①">4.2.4. SpeechSynthesisUtterance Attributes</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesisutterance-text">
   <b><a href="#dom-speechsynthesisutterance-text">#dom-speechsynthesisutterance-text</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesisutterance-text">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesisutterance-lang">
   <b><a href="#dom-speechsynthesisutterance-lang">#dom-speechsynthesisutterance-lang</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesisutterance-lang">4.2. The SpeechSynthesis Interface</a>
    <li><a href="#ref-for-dom-speechsynthesisutterance-lang①">4.2.4. SpeechSynthesisUtterance Attributes</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesisutterance-voice">
   <b><a href="#dom-speechsynthesisutterance-voice">#dom-speechsynthesisutterance-voice</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesisutterance-voice">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesisutterance-volume">
   <b><a href="#dom-speechsynthesisutterance-volume">#dom-speechsynthesisutterance-volume</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesisutterance-volume">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesisutterance-rate">
   <b><a href="#dom-speechsynthesisutterance-rate">#dom-speechsynthesisutterance-rate</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesisutterance-rate">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesisutterance-pitch">
   <b><a href="#dom-speechsynthesisutterance-pitch">#dom-speechsynthesisutterance-pitch</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesisutterance-pitch">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="eventdef-speechsynthesisutterance-start">
   <b><a href="#eventdef-speechsynthesisutterance-start">#eventdef-speechsynthesisutterance-start</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eventdef-speechsynthesisutterance-start">4.2.5. SpeechSynthesisUtterance Events</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="eventdef-speechsynthesisutterance-end">
   <b><a href="#eventdef-speechsynthesisutterance-end">#eventdef-speechsynthesisutterance-end</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eventdef-speechsynthesisutterance-end">4.2.2. SpeechSynthesis Methods</a>
    <li><a href="#ref-for-eventdef-speechsynthesisutterance-end①">4.2.5. SpeechSynthesisUtterance Events</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="eventdef-speechsynthesisutterance-error">
   <b><a href="#eventdef-speechsynthesisutterance-error">#eventdef-speechsynthesisutterance-error</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eventdef-speechsynthesisutterance-error">4.2.2. SpeechSynthesis Methods</a>
    <li><a href="#ref-for-eventdef-speechsynthesisutterance-error①">4.2.5. SpeechSynthesisUtterance Events</a>
    <li><a href="#ref-for-eventdef-speechsynthesisutterance-error②">4.2.7. SpeechSynthesisErrorEvent Attributes</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="eventdef-speechsynthesisutterance-mark">
   <b><a href="#eventdef-speechsynthesisutterance-mark">#eventdef-speechsynthesisutterance-mark</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eventdef-speechsynthesisutterance-mark">4.2.6. SpeechSynthesisEvent Attributes</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="eventdef-speechsynthesisutterance-boundary">
   <b><a href="#eventdef-speechsynthesisutterance-boundary">#eventdef-speechsynthesisutterance-boundary</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eventdef-speechsynthesisutterance-boundary">4.2.6. SpeechSynthesisEvent Attributes</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesisevent-utterance">
   <b><a href="#dom-speechsynthesisevent-utterance">#dom-speechsynthesisevent-utterance</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesisevent-utterance">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesisevent-charindex">
   <b><a href="#dom-speechsynthesisevent-charindex">#dom-speechsynthesisevent-charindex</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesisevent-charindex">4.2. The SpeechSynthesis Interface</a>
    <li><a href="#ref-for-dom-speechsynthesisevent-charindex①">4.2.6. SpeechSynthesisEvent Attributes</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesisevent-charlength">
   <b><a href="#dom-speechsynthesisevent-charlength">#dom-speechsynthesisevent-charlength</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesisevent-charlength">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesisevent-elapsedtime">
   <b><a href="#dom-speechsynthesisevent-elapsedtime">#dom-speechsynthesisevent-elapsedtime</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesisevent-elapsedtime">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesisevent-name">
   <b><a href="#dom-speechsynthesisevent-name">#dom-speechsynthesisevent-name</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesisevent-name">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesiserrorevent-error">
   <b><a href="#dom-speechsynthesiserrorevent-error">#dom-speechsynthesiserrorevent-error</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesiserrorevent-error">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesiserrorcode-canceled">
   <b><a href="#dom-speechsynthesiserrorcode-canceled">#dom-speechsynthesiserrorcode-canceled</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesiserrorcode-canceled">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesiserrorcode-interrupted">
   <b><a href="#dom-speechsynthesiserrorcode-interrupted">#dom-speechsynthesiserrorcode-interrupted</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesiserrorcode-interrupted">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesiserrorcode-audio-busy">
   <b><a href="#dom-speechsynthesiserrorcode-audio-busy">#dom-speechsynthesiserrorcode-audio-busy</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesiserrorcode-audio-busy">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesiserrorcode-audio-hardware">
   <b><a href="#dom-speechsynthesiserrorcode-audio-hardware">#dom-speechsynthesiserrorcode-audio-hardware</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesiserrorcode-audio-hardware">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesiserrorcode-network">
   <b><a href="#dom-speechsynthesiserrorcode-network">#dom-speechsynthesiserrorcode-network</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesiserrorcode-network">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesiserrorcode-synthesis-unavailable">
   <b><a href="#dom-speechsynthesiserrorcode-synthesis-unavailable">#dom-speechsynthesiserrorcode-synthesis-unavailable</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesiserrorcode-synthesis-unavailable">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesiserrorcode-synthesis-failed">
   <b><a href="#dom-speechsynthesiserrorcode-synthesis-failed">#dom-speechsynthesiserrorcode-synthesis-failed</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesiserrorcode-synthesis-failed">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesiserrorcode-language-unavailable">
   <b><a href="#dom-speechsynthesiserrorcode-language-unavailable">#dom-speechsynthesiserrorcode-language-unavailable</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesiserrorcode-language-unavailable">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesiserrorcode-voice-unavailable">
   <b><a href="#dom-speechsynthesiserrorcode-voice-unavailable">#dom-speechsynthesiserrorcode-voice-unavailable</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesiserrorcode-voice-unavailable">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesiserrorcode-text-too-long">
   <b><a href="#dom-speechsynthesiserrorcode-text-too-long">#dom-speechsynthesiserrorcode-text-too-long</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesiserrorcode-text-too-long">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesiserrorcode-invalid-argument">
   <b><a href="#dom-speechsynthesiserrorcode-invalid-argument">#dom-speechsynthesiserrorcode-invalid-argument</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesiserrorcode-invalid-argument">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesiserrorcode-not-allowed">
   <b><a href="#dom-speechsynthesiserrorcode-not-allowed">#dom-speechsynthesiserrorcode-not-allowed</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesiserrorcode-not-allowed">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesisvoice-voiceuri">
   <b><a href="#dom-speechsynthesisvoice-voiceuri">#dom-speechsynthesisvoice-voiceuri</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesisvoice-voiceuri">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesisvoice-name">
   <b><a href="#dom-speechsynthesisvoice-name">#dom-speechsynthesisvoice-name</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesisvoice-name">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesisvoice-lang">
   <b><a href="#dom-speechsynthesisvoice-lang">#dom-speechsynthesisvoice-lang</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesisvoice-lang">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesisvoice-localservice">
   <b><a href="#dom-speechsynthesisvoice-localservice">#dom-speechsynthesisvoice-localservice</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesisvoice-localservice">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-speechsynthesisvoice-default">
   <b><a href="#dom-speechsynthesisvoice-default">#dom-speechsynthesisvoice-default</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-speechsynthesisvoice-default">4.2. The SpeechSynthesis Interface</a>
   </ul>
  </aside>
<script>/* script-dfn-panel */

document.body.addEventListener("click", function(e) {
    var queryAll = function(sel) { return [].slice.call(document.querySelectorAll(sel)); }
    // Find the dfn element or panel, if any, that was clicked on.
    var el = e.target;
    var target;
    var hitALink = false;
    while(el.parentElement) {
        if(el.tagName == "A") {
            // Clicking on a link in a <dfn> shouldn't summon the panel
            hitALink = true;
        }
        if(el.classList.contains("dfn-paneled")) {
            target = "dfn";
            break;
        }
        if(el.classList.contains("dfn-panel")) {
            target = "dfn-panel";
            break;
        }
        el = el.parentElement;
    }
    if(target != "dfn-panel") {
        // Turn off any currently "on" or "activated" panels.
        queryAll(".dfn-panel.on, .dfn-panel.activated").forEach(function(el){
            el.classList.remove("on");
            el.classList.remove("activated");
        });
    }
    if(target == "dfn" && !hitALink) {
        // open the panel
        var dfnPanel = document.querySelector(".dfn-panel[data-for='" + el.id + "']");
        if(dfnPanel) {
            dfnPanel.classList.add("on");
            var rect = el.getBoundingClientRect();
            dfnPanel.style.left = window.scrollX + rect.right + 5 + "px";
            dfnPanel.style.top = window.scrollY + rect.top + "px";
            var panelRect = dfnPanel.getBoundingClientRect();
            var panelWidth = panelRect.right - panelRect.left;
            if(panelRect.right > document.body.scrollWidth && (rect.left - (panelWidth + 5)) > 0) {
                // Reposition, because the panel is overflowing
                dfnPanel.style.left = window.scrollX + rect.left - (panelWidth + 5) + "px";
            }
        } else {
            console.log("Couldn't find .dfn-panel[data-for='" + el.id + "']");
        }
    } else if(target == "dfn-panel") {
        // Switch it to "activated" state, which pins it.
        el.classList.add("activated");
        el.style.left = null;
        el.style.top = null;
    }

});
</script>